DateDiff 関数 (Visual Basic)

更新 : 2007 年 11 月

2 つの日付型 (Date) 値の間の時間間隔数を指定する長整数型 (Long) の値を返します。

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
    必ず指定します。Date1 と Date2 の間の差異の単位として使用する時間間隔を表す DateInterval 列挙値または文字列 (String) 式。

  • Date1
    必ず指定します。日付型 (Date)。計算で使用する最初の日時の値を指定します。

  • Date2
    必ず指定します。日付型 (Date)。計算で使用する 2 番目の日時の値を指定します。

  • DayOfWeek
    省略可能です。FirstDayOfWeek 列挙値から値を選択し、週の最初の曜日を指定します。指定しない場合、FirstDayOfWeek.Sunday が使用されます。

  • WeekOfYear
    省略可能です。年の第 1 週を指定する、FirstWeekOfYear 列挙型から選択した値。指定しない場合、FirstWeekOfYear.Jan1 が使用されます。

設定

Interval 引数の設定値は次のいずれかです。

列挙値

文字列値

時間の差異の単位

DateInterval.Day

"d"

Day

DateInterval.DayOfYear

"y"

Day

DateInterval.Hour

"h"

Hour

DateInterval.Minute

"n"

Minute

DateInterval.Month

"m"

Month

DateInterval.Quarter

"q"

四半期

DateInterval.Second

"s"

Second

DateInterval.Weekday

"w"

Week

DateInterval.WeekOfYear

"ww"

カレンダー週

DateInterval.Year

"yyyy"

Year

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

システム設定で指定された年の第 1 週

FirstWeekOfYear.Jan1

1

1 月 1 日を含む週 (既定値)

FirstWeekOfYear.FirstFourDays

2

新しい年の少なくとも 4 日間を含む週 (ISO 規格 8601、3.17 項に準拠)

FirstWeekOfYear.FirstFullWeek

3

新しい年の 1 週間を含む最初の週

例外

例外の種類

エラー番号

条件

ArgumentException

5

無効な Interval.

ArgumentException

5

該当する Date1、Date2、DayofWeek がありません。

InvalidCastException

13

Date1 または Date2 が無効な型です。

非構造化エラー処理を使用する Visual Basic 6.0 アプリケーションをアップグレードする場合は、「エラー番号」列を参照してください(エラー番号を Number プロパティ (Err オブジェクト) と照らし合わせます)。しかし、可能な限り、このエラー処理は Visual Basic の構造化例外処理の概要 で置き換えてください。

解説

DateDiff 関数を使用すると、指定した時間間隔が 2 つの日時の値の間にいくつ存在するかを判断できます。たとえば、DateDiff を使って、2 つの日付の間の日数や、現在から年末までの週の数などを求めることができます。

動作

  • パラメータの扱いDateDiff は Date1 の値を Date2 の値から減算して差を求めます。どちらの値も、呼び出し側プログラムでは変更されません。

  • 戻り値Date1 と Date2 は日付型 (Date) であるため、日付と時刻の値はシステム タイマの 100 ナノ秒目盛りに正確に保たれます。ただし、DateDiff は、時間間隔数を常に長整数型 (Long) の値として返します。

    Date1 が Date2 より後の日付と時刻を表す場合、DateDiff は負の数値を返します。

  • 日間隔DayOfYear は有効な時間間隔ではないため、Interval が DateInterval.DayOfYear に設定されている場合、DateInterval.Day と同じように扱われます。

  • 週間隔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)
    

    前の例では、2 つの日付間の差異が 7 日より少ないため、DateDiff は wD に 0 を返しますが、それぞれのカレンダー週の最初の日の間には 7 日の差異があるため、wY には 1 を返します。

    注意 :

    Date1 の時刻部分が Date2 の時刻部分より大きく、Interval が DateInterval.WeekOfYear に設定されている場合、DateDiff 関数は、正確な値よりも 1 つ少ない値を返します。

  • それ以上の間隔Interval が DateInterval.Year に設定されていると、戻り値は単純に Date1 の年と Date2 の年から求められます。同様に、DateInterval.Month の戻り値は、引数の年と月の部分から求められ、DateInterval.Quarter の戻り値は、2 つの日付を含む四半期から求められます。

    たとえば、12 月 31 日と翌年の 1 月 1 日を比較する場合、差は 1 日ですが、DateDiff は DateInterval.Year、DateInterval.Quarter、DateInterval.Month に対して 1 を返します。

  • その他の間隔すべての日付型 (Date) の値は DateTime 構造体でサポートされているため、メソッドには時間間隔を判断するときの追加のオプションがあります。たとえば、Subtract メソッドを、オーバーロードされたいずれかの形式で使用できます。DateTime.Subtract は Date 変数からTimeSpan を減算し、別の 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