とりあえず期待した動きはしているみたい
期待する動作
・締グループ(締日)と請求書発行日を設定すると、請求締めの対象期間の開始日と終了日を取得できる。
・請求書発行日が当月の締日(締グループ)より前の時は前月の対象期間を返す。
・月末の扱いをちゃんとする(2月や小の月における締めグループ:31の扱い)
まず各値を格納するクラスから
Private Class 請求締日の情報 Public 締グループ As Integer Public 請求書発行日 As Date Public 期間_開始日 As Date Public 期間_終了日 As Date End Class締グループ:何日締めか?(整数)月末締めは31を設定する
請求書発行日:請求書を発行する日
期間_開始日:請求書の締め期間の開始日
期間_終了日:請求書の締め期間の終了日
です。
次に実際のコードはこんな感じ?
Private Sub 締日設定(ByRef 締日 As 請求締日の情報) Dim 締グループ As Integer = 締日.締グループ '締日の日付 Dim 請求書発行日 As Date = 締日.請求書発行日 Dim 日付_請求書発行日 As Integer = 請求書発行日.Day Dim 当月 As DateTime = dtp請求書発行日.Value Dim 前月 As DateTime = CDate(当月.Year & "/" & 当月.Month & "/1").AddMonths(-1) '前月の1日 Dim 来月 As DateTime = CDate(当月.Year & "/" & 当月.Month & "/1").AddMonths(+1) '来月の1日 Dim 当月末日 As Date = 来月.AddDays(-1) '来月の1日の1日前が当月の末日 '月末日かどうか調べる If 請求書発行日.Date.Equals(当月末日.Date) Then 'なにもしない Else '締日より前の発行日なら前月の請求範囲を設定 If 締グループ - 日付_請求書発行日 > 0 Then 当月 = 当月.AddMonths(-1) 前月 = 前月.AddMonths(-1) 来月 = 来月.AddMonths(-1) End If End If Dim 締期間_終了日 As Date If Not Date.TryParse(当月.Year & "/" & 当月.Month & "/" & 締グループ, 締期間_終了日) Then 締期間_終了日 = CDate(来月.Year & "/" & 来月.Month & "/1").AddDays(-1) End If Dim 締期間_開始日 As Date If Not Date.TryParse(前月.Year & "/" & 前月.Month & "/" & 締グループ + 1, 締期間_開始日) Then 締期間_開始日 = CDate(CDate(当月.Year & "/" & 当月.Month & "/1")) End If 締日.期間_開始日 = 締期間_開始日 締日.期間_終了日 = 締期間_終了日 End Sub
使うときには
Dim 締日の情報 As New 請求締日の情報 Dim 締期間_開始日 As Date Dim 締期間_終了日 As Date 締日の情報.締グループ = 31 締日の情報.請求書発行日 = System.DateTime.Today '今日の場合 Call 締日設定(締日の情報) '値を取得する 締期間_開始日 = 締日の情報.期間_開始日 締期間_終了日 = 締日の情報.期間_終了日
とりあえずこれで使ってみよう