Q&A 21

1ヶ月後の日付を求める方法


日付型の[日付]の項目値の1ヶ月後の日付を求める場合,例えば日付型の項目に以下のような式を設定します。

[日付] + 年月間隔'1ヶ月'

この式では, 1月1日 の1ヶ月後は 2月1日 になりますが, 3月31日 の 1ヶ月後は  5月1日  になってしまいます。これは, 4月31日 の様にありえない日付になる場合は,翌月の 1 日になるように DBPro 側で制御しているからです。しかしこのような場合でも,翌月の末日(4月30日)になるように式を工夫すると以下の様になります。

計算式の例
$基準日 := [日付],
$Nヶ月 := 年月間隔'1ヶ月',
$Nヶ月後 := $基準日+$Nヶ月,
$基準日のNヶ月後末日 := #月末(#月初($基準日)+$Nヶ月),
#条件(#月末($Nヶ月後) <= $基準日のNヶ月後末日 ,$Nヶ月後,$基準日のNヶ月後末日)
式の説明
変数 $基準日 には,求める基点の日付が入ります。
変数 $Nヶ月 には,求めたい期間が入ります。この場合は1ヶ月間です。
変数 $Nヶ月後 には,DBProの仕様に沿った1ヶ月後の日付が入ります。3/31 の場合は 5/1 になります。
変数 $基準日のNヶ月後末日 には,基準日の月初から 1ヶ月後の月末の日付が入ります。3/31 の場合 4/30 になります。
単純な1ヶ月後末日と,月初からの1ヶ月後末日を比較して,前者が小さい場合は $Nヶ月後 をそうでない場合は $基準日のNヶ月後末日 を結果とします。

1ヶ月後以外の日付を求める場合は,式の2行目の 年月間隔'1ヶ月' を 年月間隔'3ヶ月'というように変えてください。

注意点
2月など月数の少ない月の場合以下のようになります。
2001年1月31日 2001年2月28日
2001年1月28日 2001年2月28日
2001年1月30日 2001年2月28日
2001年2月28日 2001年3月28日

となって 3/29〜3/31 は結果として得られません。
売掛販売などで,入金日を請求日の N ヶ月後の D 日にするというような場合は,「[FAQ00005]売上日から請求日,入金日を求める方法」を参考になさってください。