怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - 整数の年/月/日を日付型に変換する | DateSerial関数

指定された年/月/日を日付型に変換するには 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]'