Returns a Variant (Long) that specifies the number of time intervals between two dates.
Syntax
DateDiff(interval, date1, date2[, firstdayofweek][, firstweekofyear])
The DateDiff function has these arguments:
| Argument | Description |
|---|---|
interval |
Required. String expression that is the interval of time that you use to calculate the difference between date1 and date2. |
date1, date2 |
Required. Variant (Date). Two dates that you want to use in the calculation. |
firstdayofweek |
Optional. A constant that specifies the first day of the week. If you don't specify it, Sunday is assumed. |
firstweekofyear |
Optional. A constant that specifies the first week of the year. If you don't specify it, the first week is the week in which January 1 occurs. |
Settings
The interval argument has these settings:
| Setting | Description |
|---|---|
yyyy |
Year |
q |
Quarter |
m |
Month |
y |
Day of year |
d |
Day |
w |
Weekday |
ww |
Week |
h |
Hour |
n |
Minute |
s |
Second |
The firstdayofweek argument has these settings:
| Constant | Value | Description |
|---|---|---|
vbUseSystem |
0 | Uses the NLS API setting. |
vbSunday |
1 | Sunday (default) |
vbMonday |
2 | Monday |
vbTuesday |
3 | Tuesday |
vbWednesday |
4 | Wednesday |
vbThursday |
5 | Thursday |
vbFriday |
6 | Friday |
vbSaturday |
7 | Saturday |
| Constant | Value | Description |
|---|---|---|
vbUseSystem |
0 | Uses the NLS API setting. |
vbFirstJan1 |
1 | Starts with the week in which January 1 occurs (default). |
vbFirstFourDays |
2 | Starts with the first week that has at least four days in the new year. |
vbFirstFullWeek |
3 | Starts with the first full week of the year. |
Remarks
You can use the DateDiff function to determine how many specified time intervals exist between two dates. For example, you might use DateDiff to calculate the number of days between two dates or the number of weeks between today and the end of the year.
To calculate the number of days between date1 and date2, you can use either Day of year ("y") or Day ("d"). When interval is Weekday ("w"), DateDiff returns the number of weeks between the two dates. If date1 falls on a Monday, DateDiff counts the number of Mondays until date2. It counts date2 but not date1. If interval is Week ("ww"), however, the DateDiff function returns the number of calendar weeks between the two dates. It counts the number of Sundays between date1 and date2. DateDiff counts date2 if it falls on a Sunday, but it doesn't count date1, even if it falls on a Sunday.
If date1 refers to a later point in time than date2, the DateDiff function returns a negative number.
The firstdayofweek argument affects calculations that use the "w" and "ww" interval symbols.
If date1 or date2 is a date literal, the specified year becomes a permanent part of that date. However, if date1 or date2 is enclosed in double quotation marks (" "), and you omit the year, the current year is inserted in your code each time the date1 or date2 expression is evaluated. This makes it possible to write code that you can use in different years.
When you compare December 31 to January 1 of the next year, DateDiff for Year ("yyyy") returns 1 even though only one day has passed.
Note
For date1 and date2, if the Calendar property setting is Gregorian, the supplied date must be Gregorian. If the calendar is Hijri, the supplied date must be Hijri.
DateDiff Query examples
| Expression | Results |
|---|---|
SELECT DateDiff("yyyy",#01/01/2010#,[DateofSale]) AS Expr1 FROM ProductSales; |
Returns the difference, in years, between the date 01/01/2010 and the values in the DateofSale field. |
SELECT DateDiff("q",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in quarters based on the calendar year, between the system date and DateofSale, and displays it in the DaysSinceSale column. |
SELECT DateDiff("y",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in days, between the system date and DateofSale, and displays it in the DaysSinceSale column. |
SELECT DateDiff("d",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in days, between the system date and DateofSale, and displays it in the DaysSinceSale column. |
SELECT DateDiff("w",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in weekdays, between the system date and DateofSale, and displays it in the DaysSinceSale column. If DateofSale falls on a Monday, DateDiff counts the number of Mondays until the system date. It counts the system date but not the DateofSale value. |
SELECT DateDiff("ww",[DateofSale],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in calendar weeks, between the system date and DateofSale, and displays it in the DaysSinceSale column. It counts the number of Sundays between DateofSale and the system date. It counts the system date if it falls on a Sunday, but it doesn't count DateofSale, even if it falls on a Sunday. |
SELECT DateDiff("h",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in hours, between the system date and DateTime, and displays it in the DaysSinceSale column. |
SELECT DateDiff("n",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in minutes, between the system date and DateTime, and displays it in the DaysSinceSale column. |
SELECT DateDiff("s",[DateTime],Date()) AS DaysSinceSale FROM ProductSales; |
Returns the difference, in seconds, between the system date and DateTime, and displays it in the DaysSinceSale column. |
Use the DateDiff function in an expression
You can use the DateDiff function anywhere you can use expressions. For example, suppose you have a form that you use to fulfill customer orders. In the Orders table, you have a field named ReceiveBefore that contains the date by which the customer needs to receive the order. You can use the DateDiff function with a text box on the form to display the number of days left before the order must ship.
Assuming it takes ten days to ship any order, set the Control Source property of the text box as follows:
=DateDiff("d", Now(), [Orders].[ReceiveBefore])-10
When you open the form in Form View, the text box displays the number of days left before the order must ship. If there are fewer than 10 days left before the customer needs to receive the order, the number in the text box is negative. It indicates how many days late the order will be if you ship it immediately.
Use the DateDiff function in VBA code
This example uses the DateDiff function to display the number of days between a given date and today.
Dim TheDate As Date ' Declare variables.
Dim Msg
TheDate = InputBox("Enter a date")
Msg = "Days from today: " & DateDiff("d", Now, TheDate)
MsgBox Msg