メイン画像

VBScript - 日付の変換

VBScript - 日付の変換


文字列や整数で指定された値を日付型に変換する方法を紹介する。

日付として認識できるか確認する

IsDate 関数は日付として認識できるかどうかを返す。

IsDate( Expression )

Expression には確認する式を指定する。

日付または時刻として認識できる場合は True を返す。
それ以外の場合は False を返す。

NOTE:
Windows で有効な日付範囲は、西暦100年1月1日から西暦9999年12月31日まで。

日付型に変換する

CDate 関数は指定された式を日付型に変換する。

CDate( Expression )

Expression には変換する式を指定する。

戻り値は内部処理形式が Date 型のバリアント。

WScript.Echo CDate("2022/2/2")
' → 2022/02/02

存在しない日付を指定した場合はエラーが起きる。

WScript.Echo CDate("2022/2/31")
' → Microsoft VBScript 実行時エラー: 型が一致しません。: 'CDate'

IsDate 関数が False の場合でも CDate 関数で変換できることもある。

たとえば数値の 100 を引数とした場合、IsDate 関数は False (0) を返すが、CDate 関数は日付型の1900年4月9日を返す。

WScript.Echo IsDate(100)
' → 0

WScript.Echo CDate(100)
' → 1900/04/09

整数の年/月/日を日付型に変換する

DateSerial 関数は整数で指定された年/月/日を日付型に変換する。

DateSerial( Year, Month, Day )

Year には年、 Month には月、 Day には日を整数で指定する。

戻り値は内部処理形式が Date 型のバリアント。

WScript.Echo DateSerial(2022, 8, 11)
' →2022/08/11

存在しない日付を指定した場合、自動で補正される。
補正後の日付が許容範囲内であればエラーにはならない。

'2022年8月32日を指定 → 2022年9月1日
WScript.Echo DateSerial(2022, 8, 32)
' →2022/09/01

'2022年13月11日を指定 → 2023年1月11日
WScript.Echo DateSerial(2022, 13, 11)
' →2023/01/11

日に 0 (ゼロ)を指定すると、前月の末日が返る。

'2022年2月の月末日は?
WScript.Echo DateSerial(2022, 3, 0)
' →2022/02/28

月に 0 (ゼロ)を指定すると前年の12月が返る。

WScript.Echo DateSerial(2022, 0, 11)
' →2021/12/11

年の指定が2桁までの場合、自動で4桁に補正される。
1~49は2000年、50~99は1900年となる。
(Windows 10 Pro 21H2 で確認)

WScript.Echo DateSerial(1, 1, 1)
' →2001/01/01

WScript.Echo DateSerial(49, 12, 31)
' →2049/12/31

WScript.Echo DateSerial(50, 1, 1)
' →1950/01/01

WScript.Echo DateSerial(99, 12, 31)
' →1999/12/31

WScript.Echo DateSerial(100, 1, 1)
' →100/01/01

有効な日付の範囲から外れた場合はエラーになる。

WScript.Echo DateSerial(10000, 1, 1)
' →エラー

自動補正後の日付が範囲外であってもエラーになる。

'9999年12月32日が自動補正されて10000年1月1日になる
'(しかし10000年は有効範囲外なのでエラー)
WScript.Echo DateSerial(9999, 12, 32)
' →エラー

引数 年/月/日 のいずれか1つでも -32768 ~ 32767 の範囲外だった場合はエラーが起きる。

WScript.Echo DateSerial(100, 1, 32767)
' → 189/09/17

WScript.Echo DateSerial(100, 1, 32768)
' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: 32768]'

WScript.Echo DateSerial(2000, 1, -32768)
' → 1910/04/14

WScript.Echo DateSerial(2000, 1, -32769)
' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: -32769]'

日付文字列を日付型に変換する

DateValue 関数は日付文字列を日付型に変換する。

DateValue( DateString )

DateString には日付文字列を指定する。
存在しない日付を指定するとエラーになる。

戻り値は内部処理形式が Date 型のバリアント。

WScript.Echo DateValue("100/1/1")
' → 100/01/01

WScript.Echo DateValue("9999/12/31")
' → 9999/12/31

英語(アメリカ)の年月日指定(月→日→年)でも変換できる。

WScript.Echo DateValue("Dec 30, 1991")
' → 1991/12/30

WScript.Echo DateValue("December 30, 1991")
' → 1991/12/30

英語(イギリス)の年月日指定(日→月→年)でも変換できる。

WScript.Echo DateValue("30 Dec 1991")
' → 1991/12/30

WScript.Echo DateValue("30 December 1991")
' → 1991/12/30

年の指定を省略した場合は現在の年が使われる。

WScript.Echo DateValue("12/30")
' → 2023/12/30

WScript.Echo DateValue("December 30")
' → 2023/12/30

時刻は返されない。

WScript.Echo DateValue("2022/9/30 15:30:00")
' → 2022/09/30

整数の時/分/秒を日付型に変換する

TimeSerial 関数は整数で指定された時/分/秒を日付型に変換する。

TimeSerial( Hour, Minute, Second )

Hour には時、 Minute には分、 Second には秒を整数で指定する。

戻り値は内部処理形式が Date 型のバリアント。

WScript.Echo TimeSerial(0, 0, 0)
' → 0:00:00

WScript.Echo TimeSerial(23, 59, 59)
' → 23:59:59

時刻の範囲外の数値を指定した場合、自動で繰り上げられる。
たとえば、75秒を指定した場合は1分15秒になる。

'75秒は1分15秒になる
WScript.Echo TimeSerial(0, 0, 75)
' → 0:01:15

'75分は1時間15分になる
WScript.Echo TimeSerial(0, 75, 0)
' → 1:15:00

'40時間は1日と16時間になる
WScript.Echo TimeSerial(40, 0, 0)
' → 1899/12/31 16:00:00

引数のいずれか1つでも -32768 ~ 32767 の範囲外だった場合はエラーとなる。

WScript.Echo TimeSerial(32767, 0, 0)
' → 1903/09/26 7:00:00

WScript.Echo TimeSerial(32768, 0, 0)
' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: 32768]'

WScript.Echo TimeSerial(-32768, 0, 0)
' → 1896/04/04 8:00:00

WScript.Echo TimeSerial(-32769, 0, 0)
' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: -32769]'

時刻文字列を日付型に変換する

TimeValue 関数は時刻文字列を日付型に変換する。

TimeValue( TimeString )

TimeString には時刻文字列を指定する。
存在しない時刻を指定するとエラーになる。

戻り値は内部処理形式が Date 型のバリアント。

WScript.Echo TimeValue("0:0:0")
' → 0:00:00

WScript.Echo TimeValue("1.23.45")
' → 1:23:45

数字を1つだけ指定した場合はエラーが起きる。

WScript.Echo TimeValue("5")
' → Microsoft VBScript 実行時エラー: 型が一致しません。: 'TimeValue'

数字を2つ指定した場合は秒の省略として 0 秒になる。

WScript.Echo TimeValue("7:9")
' → 7:09:00

存在しない時刻を指定した場合はエラーが起きる。

'NOTE: 60秒は存在しない
WScript.Echo TimeValue("7:20:60")
' → Microsoft VBScript 実行時エラー: 型が一致しません。: 'TimeValue'

日付は返されない。

WScript.Echo TimeValue("2022/9/30 15:30:45")
' → 15:30:45

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事