DateDiff 函数 (Visual Basic)

更新: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

新年的第一个全周

异常

异常类型

错误号

条件

ArgumentException

5

Interval 无效。

ArgumentException

5

Date1、Date2 或 DayofWeek 超出范围。

InvalidCastException

13

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,因为两个日历周各自的第一天之间相差七天。

    警告:

    如果 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.SubtractTimeSpan 从 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)

要求

命名空间:Microsoft.VisualBasic

**模块:**DateAndTime

**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)

请参见

参考

DateAdd 函数 (Visual Basic)

DatePart 函数 (Visual Basic)

Day 函数 (Visual Basic)

Format 函数

Now 属性

Weekday 函数 (Visual Basic)

Year 函数 (Visual Basic)

Date 数据类型 (Visual Basic)

DateTime

TimeSpan