2 つの指定した日付の時間間隔を表すバリアント型 (内部処理形式 Long の Variant) の値を指定します。
構文
DateDiff (interval, date1, date2 [, firstdayofweek] [, firstweekofyear] )
DateDiff 関数の構文には、次の引数があります。
| 引数 | 説明 |
|---|---|
| interval | 必ず指定します。 date1 と date2 の差を計算するために使用する間隔を表す文字列式。 |
| date1、date2 | 必須。 Variant (Date)。 計算の対象となる 2 つの日付を指定します。 |
| firstdayofweek | 省略可能です。 週の最初の日を指定する定数。 省略すると、日曜日を指定したものと見なされます。 |
| firstweekofyear | 省略可能。 年の第 1 週を指定する定数です。 省略すると、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 日を比較すると、1 日が経過しただけの場合でも、年 ("yyyy") の DateDiff は 1 を返します。
注
date1 と date2 の場合、Calendar プロパティ設定がグレゴリオ暦の場合、指定された日付はグレゴリオ暦である必要があります。 カレンダーがイスラム暦の場合は、イスラム暦で日付を指定する必要があります。
DateDiff クエリの例
| Expression | 結果 |
|---|---|
| SELECT DateDiff("yyyy",#01/01/2010#,[DateofSale]) AS Expr1 FROM ProductSales; | Date2 と Date1 の差を返します (Date1 は最も古く、Date2 は最新と見なします)。 結果: フィールド "DateofSale" の値と日付 "01/01/2010" の値の差を 'Years' の数として指定します。 |
| SELECT DateDiff("q",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; | システム日付と "DateofSale" の差を 'Quarters' (カレンダー年に基づく) の数として返し、列 "DaysSinceSale" に表示します。 は、システム日付と "DateofSale" の差を 'Months' の数として返し、列 "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" の差を 'Weekdays' の数として返し、列 "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" の差を 'Hours' の数として返し、列 "DaysSinceSale" に表示します。 |
| SELECT DateDiff("n",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; | システム日付と "DateTime" の差を 'Minutes' の数として返し、列 "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