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
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?