DateAdd関数による月末の日付から1月後(または1月前)の日付の扱い

f:id:accs2014:20161001115837p:plain:right:w200

 「1か月=30日」といった特別な取り決めがない限り、通常は5月1日の1月後は6月1日ですし、7月1日の1月前は6月1日です。対応する「日」がある限りその「日」に変わりはありません。DateAdd関数を用いて計算した場合も、当然このような結果となります。
 では、5月31日の1月後とか、7月31日の1月前といったように、対応する「日」がない場合は何月何日になるのか、というとちょっと気になるところです。

 右のようなテーブルをもとにやってみます。


f:id:accs2014:20161001115836p:plain:right:w400

 DateAdd関数で1月後、1月前の日付をそれぞれを求めてみます(第1引数を「m」とする)。


f:id:accs2014:20161001115835p:plain:right:w300

 結果はこうです。
 要約すると

  • 「月」の値は、必ずもとの月の前月または翌月
  • 「日」の値は、その月(前月または翌月)に存在する日の中で、元の「日」の値に最も近いもの
となります。


f:id:accs2014:20161001115834p:plain:right:w400

 ちなみに、第1引数を「q」あるいは「yyyy」とすることで四半期後(前)と1年後(前)の日付を求めた結果はこのようになります。なお、1年後(前)を求めるのは、うるう年の2月29日の扱いを知るため(だけ)です。
 四半期後(前)については月が差が3、1年後(前)については月の差が12となるだけで、「日」の値については1月後(前)の場合と同様です。