VB6・VBA関数メモ:DateDiff関数

DateDiff関数についてメモしておきます。
2つの日時の指定項目の差を返す関数になります。
何日経過したか等を計算するのに便利です。


概要

DateDiff(Interval As String, Date1, Date2, _
            [FirstDayOfWeek As VbDayOfWeek = vbSunday], _
            [FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1])
機能 2つの日時の指定項目の差を返す
引数 Interval 比較する項目(日にちや時刻等)を文字列で指定 String型
Date1 比較対象の日時 Variant型
Date2 比較対象の日時 Variant型
FirstDayOfWeek (省略可)
週の第1日目の曜日を表す定数
省略時はvbSunday(日曜)を指定
VbDayOfWeek型
FirstWeekOfYear (省略可)
年度の第1週を表す定数
省略時はvbFirstJan1を指定
VbFirstWeekOfYear型
戻り値 指定項目の差 Variant型(Integer型)


使用例

説明 記述例 出力
年の差を取得 DateDiff("yyyy", "2011/1/1", "2015/2/28") 4
四半期の差を取得 DateDiff("q", "2011/1/1", "2011/9/30") 2
月の差を取得 DateDiff("m", "2011/1/1", "2011/9/30") 8
日の差を取得 DateDiff("d", "2011/1/1", "2011/2/28") 58
年間通算日の差を取得
※"d"と同じ動き
DateDiff("y", "2011/1/1", "2011/2/28") 58
週日の差を取得 DateDiff("w", "2011/1/1", "2011/2/28") 8
週の差を取得 DateDiff("ww", "2011/1/1", "2011/2/28") 9
時の差を取得 DateDiff("h", "12:00:00", "14:00:00") 2
分の差を取得 DateDiff("n", "12:00:00", "12:30:00") 30
秒の差を取得 DateDiff("s", "12:00:00", "12:00:30") 30


VbDayOfWeek列挙型

定数名 説明 使用例 出力
vbUseSystem 0 NLS APIの設定値 DateDiff("ww", "2011/9/1", "2011/9/15", vbUseSystem) 2
vbSunday 1 (既定値)日曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbSunday) 2
vbMonday 2 月曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbMonday) 2
vbTuesday 3 火曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbTuesday) 2
vbWednesday 4 水曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbWednesday) 2
vbThursday 5 木曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbThursday) 2
vbFriday 6 金曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbFriday) 2
vbSaturday 7 土曜 DateDiff("ww", "2011/9/1", "2011/9/15", vbSaturday) 2


VbDayOfYear列挙型

定数名 説明 使用例 出力
vbUseSystem 0 NLS APIの設定値 DateDiff("ww", "2011/9/1", "2011/9/15", , vbUseSystem) 2
vbFirstJan1 1 (既定値)1月1日を含む週を年度の第1週として扱う DateDiff("ww", "2011/9/1", "2011/9/15", , vbFirstJan1) 2
vbFirstFourDays 2 7日のうち少なくとも4日が新年度に含まれる週を年度の第1週として扱う DateDiff("ww", "2011/9/1", "2011/9/15", , vbFirstFourDays) 2
vbFirstFullWeek 3 週の全体が新年度に含まれる週を年度の第1週として扱う DateDiff("ww", "2011/9/1", "2011/9/15", , vbFirstFullWeek) 2


動作検証

説明 記述例 出力
Date1よりDate2の方が小さい場合はマイナスで値が返される DateDiff("d", "2011/9/14", "2011/9/1") -13
年が異なる場合、1秒だけの差でも
1年差と返す
(月や日,時,分でも同様)
DateDiff("yyyy", "2010/12/31 23:59:59", "2011/1/1 0:00:00") 1
"w"を指定した場合はDate1の曜日
それぞれ年度の週数をカウントし、
その差を取得する
DateDiff("w", "2011/11/1", "2011/11/28") 3
DateDiff("w", "2011/11/1", "2011/11/29") 4
"ww"を指定した場合は
FirstDayOfWeekで指定した曜日
それぞれ年度の週数をカウントし、
その差を取得する
DateDiff("ww", "2011/11/1", "2011/11/23", vbThursday) 3
DateDiff("ww", "2011/11/1", "2011/11/24", vbThursday) 4
"w"と"ww"の計算結果は
DatePart関数で取得した曜日数の差だと考えると分かりやすいかもしれません。
※DatePart関数の"w"はDateDiff関数と違い曜日を示す数値なので注意ですが…
DatePart("ww", "2011/11/1", vbTuesday) 45
DatePart("ww", "2011/11/28", vbTuesday) 48
DatePart("ww", "2011/11/29", vbTuesday) 49
DatePart("ww", "2011/11/1", vbThursday) 44
DatePart("ww", "2011/11/23", vbThursday) 47
DatePart("ww", "2011/11/24", vbThursday) 48


コメント
コメントする








    
この記事のトラックバックURL
トラックバック