DateDiff 函数

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

返回指定两个日期之间的时间间隔数 (长) 的变体。

语法

DateDiff(interval, date1, date2[, firstdayofweek][, firstweekofyear])

此 DateDiff 函数具有以下参数:

参数 说明
interval 必需。 字符串表达式,即用于计算 和 之间的date2差date1值的时间间隔。
date1, date2 必需。 日期 ) (变体。 要在计算中使用的两个日期。
firstdayofweek 可选。 一个常量,用于指定一周的第一天。 如果未指定,则假定为星期日。
firstweekofyear 可选。 指定一年中第一周的常量。 如果未指定,则第一周是 1 月 1 日发生的那一周。

“设置”

interval参数具有以下设置:

设置 说明
yyyy 年
q 季度
m 月
y 一年中的某一天
d 日
w Weekday
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 从新年中至少有四天的第一周开始。
vbFirstFullWeek 3 从一年中的第一个完整周开始。

备注

可以使用该 DateDiff 函数来确定两个日期之间存在多少个指定的时间间隔。 例如,可以使用计算 DateDiff 两个日期之间的天数或今天和年底之间的周数。

若要计算 和 之间的天date1数,可以使用 一年中的某一天 ("y") 或第 ("d"date2) 。 何时 interval 为工作日 ("w") , DateDiff 返回两个日期之间的周数。 如果属于星期一,DateDiff则date1计算星期一的数量,直到 date2。 它很重要date2,但不是。date1 但是,如果为 Week ("ww") ,则interval该DateDiff函数返回两个日期之间的日历周数。 它计算 和 date2之间周日的date1数目。 DateDiff 如果落在星期日,则算数 date2 ,但不算, date1即使落在星期日。

如果引用的是晚于时间date2点,则date1该DateDiff函数返回负数。

此 firstdayofweek 参数会影响使用 "w" 和 "ww" 间隔符号的计算。

如果 或 date2 是日期文本,则date1指定年份将成为该日期的永久部分。 但是,如果将 or date2 括在双引号 (" ") ,并且省略了年份,则date1每次计算 OR date2 表达式时date1,都会在代码中插入当前年份。 这使得编写可以在不同年份使用的代码成为可能。

将 12 月 31 日与次年 1 月 1 日进行比较时, DateDiff 对于第 (年) "yyyy" 即使只过去了一天,也返回 1。

注意

对于 date1date2和 ,如果属性设置为公历,则 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 。 如果属于星期一,DateDiff则DateofSale计算到系统日期之前的星期一数。 它计数系统日期,但不计数 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

另请参阅

选择正确的日期函数