更新:2007 年 11 月
返回一个 Long 值,该值指定两个 Date 值之间的时间间隔数。
Public Overloads Function DateDiff( _
    ByVal Interval As [ DateInterval | String ], _
    ByVal Date1 As DateTime, _
    ByVal Date2 As DateTime, _
    Optional ByVal DayOfWeek As FirstDayOfWeek = FirstDayOfWeek.Sunday, _
    Optional ByVal  WeekOfYear As FirstWeekOfYear = FirstWeekOfYear.Jan1 _
) As Long
参数
- Interval 
 必选。DateInterval 枚举值或 String 表达式,表示要用作 Date1 和 Date2 之间差额的单位的时间间隔。
- Date1 
 必需。Date。要在计算中使用的第一个日期/时间值。
- Date2 
 必需。Date。要在计算中使用的第二个日期/时间值。
- DayOfWeek 
 可选。选自 FirstDayOfWeek 枚举的值,用于指定一周的第一天。如果未指定,则使用 FirstDayOfWeek.Sunday。
- WeekOfYear 
 可选。选自 FirstWeekOfYear 枚举的值,该枚举用于指定一年的第一周。如果未指定,则使用 FirstWeekOfYear.Jan1。
设置
Interval 参数可以有以下设置之一。
| 枚举值 | 字符串值 | 时间差额的单位 | 
|---|---|---|
| DateInterval.Day | “d” | 天 | 
| DateInterval.DayOfYear | “y” | 天 | 
| DateInterval.Hour | “h” | 小时 | 
| DateInterval.Minute | “n” | 分钟 | 
| DateInterval.Month | “m” | 月 | 
| DateInterval.Quarter | “q” | 季度 | 
| DateInterval.Second | “s” | 秒 | 
| DateInterval.Weekday | “w” | 周 | 
| DateInterval.WeekOfYear | “ww” | 日历周 | 
| DateInterval.Year | “yyyy” | 年份 | 
DayOfWeek 参数可以有以下设置之一。
| 枚举值 | 值 | 说明 | 
|---|---|---|
| FirstDayOfWeek.System | 0 | 系统设置中指定的周的第一天 | 
| FirstDayOfWeek.Sunday | 1 | 星期日(默认) | 
| FirstDayOfWeek.Monday | 2 | 星期一(依照 ISO 8601 标准第 3.17 节) | 
| FirstDayOfWeek.Tuesday | 3 | 星期二 | 
| FirstDayOfWeek.Wednesday | 4 | 星期三 | 
| FirstDayOfWeek.Thursday | 5 | 星期四 | 
| FirstDayOfWeek.Friday | 6 | 星期五 | 
| FirstDayOfWeek.Saturday | 7 | 星期六 | 
WeekOfYear 参数可以有以下设置之一。
| 枚举值 | 值 | 说明 | 
|---|---|---|
| FirstWeekOfYear.System | 0 | 系统设置中指定的年的第一周 | 
| FirstWeekOfYear.Jan1 | 1 | 1 月 1 日所在的周(默认) | 
| FirstWeekOfYear.FirstFourDays | 2 | 至少有四天属于新年的周(依照 ISO 8601 标准第 3.17 节) | 
| FirstWeekOfYear.FirstFullWeek | 3 | 新年的第一个全周 | 
异常
| 异常类型 | 错误号 | 条件 | 
|---|---|---|
| Interval 无效。 | ||
| Date1、Date2 或 DayofWeek 超出范围。 | ||
| Date1 或 Date2 是无效类型。 | 
如果正在升级使用非结构化错误处理方式的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象) 比较错误号。) 然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述 替换这种错误控制。
备注
可以使用 DateDiff 函数来确定两个日期/时间值之间存在多少指定时间间隔。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底相隔几周。
行为
- **参数处理。**DateDiff 将 Date1 值从 Date2 值中减去,得到差值。调用程序中的两个值都未更改。 
- **返回值。**因为 Date1 和 Date2 的数据类型为 Date,所以它们所存储系统计时器上日期和时间值精确到 100 毫微秒。可是,DateDiff 总是将时间间隔数返回成 Long 数据类型值。 - 若 Date1 表示的日期和时间比 Date2 的晚,则 DateDiff 返回负数。 
- **间隔天数。**如果将 Interval 设置为 DateInterval.DayOfYear,对它的处理与 DateInterval.Day 相同,因为 DayOfYear 不是时间间隔的有意义单位。 
- **间隔周数。**如果将 Interval 设置为 DateInterval.WeekOfYear,则返回值表示包含 Date1 的周的第一天与包含 Date2 的周的第一天相隔的周数。下面的示例演示了这样所产生的结果与 DateInterval.Weekday 所产生的结果的不同之处。 - ' The following statements set datTim1 to a Thursday ' and datTim2 to the following Tuesday. Dim datTim1 As Date = #1/4/2001# Dim datTim2 As Date = #1/9/2001# ' Assume Sunday is specified as first day of the week. Dim wD As Long = DateDiff(DateInterval.Weekday, datTim1, datTim2) Dim wY As Long = DateDiff(DateInterval.WeekOfYear, datTim1, datTim2)- 在上面的示例中,DateDiff 为 wD 返回 0,因为两个日期之间的差额小于七天,而它为 wY 返回 1,因为两个日历周各自的第一天之间相差七天。 .gif) 警告: 警告:- 如果 Date1 的时间部分比 Date2 的时间部分大,且 Interval 设置为 DateInterval.WeekOfYear,则 DateDiff 函数将返回一个小于正确值的值。 
- **更大间隔。**如果将 Interval 设置为 DateInterval.Year,则仅从 Date1 和 Date2 的年份部分计算返回值。同样,DateInterval.Month 的返回值仅从参数的年份和月份部分计算,而 DateInterval.Quarter 的返回值从包含两个日期的季度计算。 - 例如,比较以下年份的 12 月 31 日与 1 月 1 日时,即使最多只过了一天,DateDiff 也为 DateInterval.Year、DateInterval.Quarter 或 DateInterval.Month 返回 1。 
- **其他间隔。**因为每个 Date 值都由 DateTime 结构支持,所以其方法在查找时间间隔中提供了附加选项。例如,可以以其中一种重载形式使用 Subtract 方法:DateTime.Subtract 将 TimeSpan 从 Date 变量中减去,并返回另一个 Date 值,DateTime.Subtract 减去 Date 值,并返回 TimeSpan。可以给过程计时,以确定它所花的毫秒数,如下面的示例所示。 - Dim startTime As Date = Now ' Run the process that is to be timed. Dim runLength As Global.System.TimeSpan = Now.Subtract(startTime) Dim millisecs As Integer = runLength.Milliseconds
示例
本示例使用 DateDiff 函数显示给定日期和今天的间隔天数。
Dim firstDate, msg As String
Dim secondDate As Date
firstDate = InputBox("Enter a date")
secondDate = CDate(firstDate)
msg = "Days from today: " & DateDiff(DateInterval.Day, Now, secondDate)
MsgBox(msg)
要求
**模块:**DateAndTime
**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)