2 つの日付間の時間間隔の数を指定する バリアント型 (Long) の値を返します。
構文
DateDiff(interval, date1, date2[, firstdayofweek][, firstweekofyear])
DateDiff関数には、次の引数があります。
| 引数 | 説明 |
|---|---|
interval |
必ず指定します。
date1とdate2の差を計算するために使用する時間間隔を表す文字列式。 |
date1, date2 |
必須。 Variant (Date)。 計算で使用する 2 つの日付。 |
firstdayofweek |
省略可能です。 週の最初の日を指定する定数。 指定しない場合、日曜日が想定されます。 |
firstweekofyear |
省略可能。 年の第 1 週を指定する定数です。 指定しない場合、最初の週は 1 月 1 日が発生する週です。 |
設定
interval引数には、次の設定があります。
| 設定 | 説明 |
|---|---|
yyyy |
年 |
q |
四半期 |
m |
月 |
y |
年間通算日 |
d |
日 |
w |
平日 |
ww |
週 |
h |
時 |
n |
分 |
s |
秒 |
firstdayofweek引数には、次の設定があります。
| 定数 | 値 | 説明 |
|---|---|---|
vbUseSystem |
0 | NLS API 設定を使用します。 |
vbSunday |
1 | 日曜日 (既定) |
vbMonday |
2 | 月曜日 |
vbTuesday |
3 | 火曜日 |
vbWednesday |
4 | 水曜日 |
vbThursday |
5 | 木曜日 |
vbFriday |
6 | 金曜日 |
vbSaturday |
7 | 土曜日 |
| 定数 | 値 | 説明 |
|---|---|---|
vbUseSystem |
0 | NLS API 設定を使用します。 |
vbFirstJan1 |
1 | 1 月 1 日が発生する週から始まります (既定値)。 |
vbFirstFourDays |
2 | 新しい年に少なくとも 4 日を含む最初の週から始まります。 |
vbFirstFullWeek |
3 | 年の最初の完全な週から始まります。 |
解説
DateDiff関数を使用して、2 つの日付の間に指定された時間間隔の数を決定できます。 たとえば、 DateDiff を使用して、2 つの日付の日数、または今日から年末までの週数を計算できます。
date1からdate2までの日数を計算するには、年の日 ("y") または日 ("d") を使用します。
intervalが Weekday ("w") の場合、DateDiffは 2 つの日付の間の週数を返します。
date1が月曜日に当たる場合、DateDiffはdate2まで月曜日の数をカウントします。
date2カウントされますが、date1はカウントされません。 ただし、 interval が Week ("ww") の場合、 DateDiff 関数は 2 つの日付の間の予定表の週数を返します。
date1からdate2までの日曜日の数をカウントします。
DateDiff は、日曜日に当たる場合は date2 カウントされますが、日曜日に当たる場合でも、 date1はカウントされません。
date1がdate2よりも後の時点を参照する場合、DateDiff関数は負の数値を返します。
firstdayofweek引数は、"w"と"ww"間隔記号を使用する計算に影響します。
date1またはdate2が日付リテラルの場合、指定した年はその日付の永続的な部分になります。 ただし、 date1 または date2 が二重引用符 (" ") で囲まれており、年を省略すると、 date1 または date2 式が評価されるたびに、現在の年がコードに挿入されます。 これにより、さまざまな年に使用できるコードを記述できます。
12 月 31 日と翌年の 1 月 1 日を比較すると、年 ("yyyy") のDateDiffは、1 日しか経過していなくても 1 を返します。
注
date1とdate2の場合、Calendar プロパティの設定がグレゴリオ暦の場合、指定された日付はグレゴリオ暦である必要があります。 カレンダーがイスラム暦の場合は、イスラム暦で日付を指定する必要があります。
DateDiff クエリの例
| Expression | 結果 |
|---|---|
SELECT DateDiff("yyyy",#01/01/2010#,[DateofSale]) AS Expr1 FROM ProductSales; |
日付 01/01/2010 と DateofSale フィールドの値の差を年単位で返します。 |
SELECT DateDiff("q",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateofSaleの差を暦年に基づいて四半期単位で返し、 DaysSinceSale 列に表示します。 |
SELECT DateDiff("y",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateofSaleの差を日数で返し、 DaysSinceSale 列に表示します。 |
SELECT DateDiff("d",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateofSaleの差を日数で返し、 DaysSinceSale 列に表示します。 |
SELECT DateDiff("w",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateofSaleの差を平日単位で返し、 DaysSinceSale 列に表示します。
DateofSaleが月曜日に当たる場合、DateDiffはシステム日付までの月曜日の数をカウントします。 システム日付はカウントされますが、 DateofSale 値はカウントされません。 |
SELECT DateDiff("ww",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateofSaleの差を暦週単位で返し、 DaysSinceSale 列に表示します。
DateofSaleからシステム日付までの日曜日の数をカウントします。 日曜日に当たる場合はシステム日付をカウントしますが、日曜日に当たる場合でも、 DateofSaleはカウントされません。 |
SELECT DateDiff("h",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateTimeの差を時間単位で返し、 DaysSinceSale 列に表示します。 |
SELECT DateDiff("n",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateTimeの差を分単位で返し、 DaysSinceSale 列に表示します。 |
SELECT DateDiff("s",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; |
システム日付と DateTimeの差を秒単位で返し、 DaysSinceSale 列に表示します。 |
式で DateDiff 関数を使用する
DateDiff関数は、式を使用できる任意の場所で使用できます。 たとえば、顧客注文のフルフィルメントに使用するフォームがあるとします。 Orders テーブルには、顧客が注文を受け取るために必要な日付を含む ReceiveBefore という名前のフィールドがあります。 フォームのテキスト ボックスと共に DateDiff 関数を使用すると、注文が出荷されるまでの残りの日数を表示できます。
注文の発送に 10 日かかると仮定して、テキスト ボックスの [コントロール ソース ] プロパティを次のように設定します。
=DateDiff("d", Now(), [Orders].[ReceiveBefore])-10
フォーム ビューでフォームを開くと、注文が出荷されるまでの日数がテキスト ボックスに表示されます。 顧客が注文を受け取る必要が残り 10 日未満の場合、テキスト ボックスの数値は負になります。 すぐに発送した場合に注文が遅れる日数を示します。
VBA コードで DateDiff 関数を使う
この例では、 DateDiff 関数を使用して、特定の日付から今日までの日数を表示します。
Dim TheDate As Date ' Declare variables.
Dim Msg
TheDate = InputBox("Enter a date")
Msg = "Days from today: " & DateDiff("d", Now, TheDate)
MsgBox Msg