2 つの日付間の時間間隔の数を指定する Variant (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 | 1 年の最初の丸 1 週間から始まります。 |
解説
DateDiff 関数を使用すると、指定された 2 つの日付の間に存在する時間間隔の数を調べることができます。 たとえば、 DateDiff を使用して、2 つの日付間の日数や、今日から年末までの週数を計算できます。
date1 と date2 の間の日数を計算するには、年間の日 ("y") または日 ("d") のいずれかを使用できます。
intervalが平日 ("w") の場合、DateDiff は、2 つの日付間の週数を返します。
date1が月曜日に当てはまる場合、DateDiff はdate2までの月曜日の数をカウントします。
date2カウントされますが、date1カウントしません。 ただし、 interval が週 ("ww") の場合は、 DateDiff 関数は、2 つの日付間の暦週数を返します。
date1 から date2 までの日曜日の数をカウントします。
DateDiff 日曜日の場合は date2 カウントしますが、日曜日であっても date1 カウントされません。
参照する時点が date2 より後の時点date1場合、DateDiff 関数は負の数値を返します。
firstdayofweek 引数は、"w" と "ww" の間隔記号を使用する計算に影響します。
date1 または date2 が日付リテラルの場合、指定した年はその日付の恒久的な部分になります。 ただし、 date1 または date2 を二重引用符 (" ") で囲み、年を省略した場合、 date1 式または date2 式が評価されるたびに現在の年がコードに挿入されます。 これにより、異なる年で使用できるコードを記述できます。
12 月 31 日と翌年の 1 月 1 日を比較すると、1 日しか経過していない DateDiff ("yyyy") は 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 関数は、式を使用できる場所であればどこでも使用できます。 たとえば、顧客の注文を処理するために使用するフォームがあるとします。 "注文" テーブルには、顧客が注文を受け取る必要がある日付を含む 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