JavaScript

Date() コンストラクター

 編集:2023.01.20 by T.A.

[Edge]。→

現在の時刻、または指定のデータの時刻を表す文字列/オブジェクトを返します。

構文

現在の日時(地方時)を表す文字列を返します

Date()

現在の日時を表すオブジェクトを返します

new Date()

1つの数値で指定: 協定世界時で ECMAScript 元期からのミリ秒単位の数値で設定し、日時を表すオブジェクトで返します。

new Date(value)
value mdn: 協定世界時(UTC)での 1970年 1 月 1 日午前 0 時 0 分 0 秒(ECMAScript 元期、UNIX 元期と等価)からのミリ秒数を表す整数値。¶負の数もOKのようです。うるう秒は無視します。大部分の 関数は秒単位の精度しかないことに注意してください。

日時文字列で指定: 地方時(UTC取り扱い可)として設定し日時を表すオブジェクトを返します。

new Date(dateString)
dateString 日時を表す文字列。

mdn: 日付を表す文字列値で、Date.parse() メソッドによって認識される形式で指定します。(ECMA262 仕様書は を定めていますが、実装がほかの形式を定義している場合があり、この多くが を含んでいます。)

ISO 8601 形式では、日付のみの文字列(例えば "2020-10-05")ではUTCとして扱われ、時刻も指定(例えば "2020-10-05T00:00:00")では地方時として扱われる。

ISO 8601 カレンダー日付拡張形式: (YYYY-MM-DDTHH:mm:ss.sssZ)

日付部[時刻部]
日付部
YYYY[-MM[-DD]]
時刻部
THH:mm[:ss[.sss]][Offset]
YYYY 「年」を表す数字 00009999
MM 「月」を表す数字 0112
DD 「日」を表す数字 0131。その月を超えた値は日付が繰り上がる。
HH 「時」を表す数字 0023
mm 「分」を表す数字 0059
ss 「秒」を表す数字 0059
sss 「ミリ秒」を表す数字 000999
Offset 指定すると地方時ではなく UTC として扱われる。
Z|±HH:mm
Z 値: Z(UTC 日時を意味する)。
± UTCオフセット表現。指定日時は、以降の HH:mmで増減されていることを意味する¶。

値: +(増算)、-(減算)。

RFC 2822 による:

[Week,]MM DD YYYY[ HH:mm[:ss][zone]]
Edgeによる調べ、他:
Week 「週」を表す文字列 MonTueWedThuFriSatSun。実質どんな文字列でも構わないようです。間違っていても正しい値になりました。
MM 「月」を表す数字 112、又は文字列 JanFebMarAprMayJunJulAugSepOctNovDec
DD 「日」を表す数字 131。その月を超えた値は日付が繰り上がる。
YYYY 「年」を表す数字 00009999
HH 「時」を表す数字 0023
mm 「分」を表す数字 0059
ss 「秒」を表す数字 0059
zone 形式:
±hhmm|obs-zone
± UTCオフセット表現。値: +-

指定日時が以降の hhmmで増減されていることを表す¶。

これ以降を指定すると地方時ではなく UTC として扱われる。

hhmm 「時」「分」を表す数字 00009999
obs-zone 値: UT(ユニバーサル タイム(UTC?)として¶)/GMT(GMTとして¶)。

時刻とは半角スペースで区切りが必要のようです。

2つ以上の数値で日時を指定: 地方時で設定され日時を表すオブジェクトを返します。

new Date( year, monthIndex[, day[, hours[, minutes[, seconds[, milliseconds]]]]] )
year “年”を表す整数値です。

0 から 99 までの値は、1900 から 1999 までの値にマッピングされます。

他の値は実際の年になります。後述の例をご覧ください。

monthIndex “月”を表す整数値(0(1月)~11(12月))です。
day 省略可。“日”を表す整数値(1~31)です。初期値 1。
hours 省略可。“時”を表す整数値(0~23)です。初期値 0。
minutes 省略可。“分”を表す整数値(0~59)です。初期値 0。
seconds 省略可。“秒”を表す整数値(0~59)です。初期値 0。
milliseconds 省略可。“ミリ秒”を表す整数値(0~999)です。初期値 0。

各値は、範囲外の値は指定日時を増減計算して設定されるようです。

戻り値

文字列、または Date オブジェクト。

//●newの指定
D=Date();      //=[string]:Sun Dec 04 2022 18:58:36 GMT+0900 (日本標準時)
D2=new Date(); //=[object]:Sun Dec 04 2022 18:58:36 GMT+0900 (日本標準時)
DA2=D2.toISOString();  //=[string]:2022-12-04T09:58:36.608Z。UTC。

D=Date(1000);
	//=[string]:Sun Dec 04 2022 16:22:20 GMT+0900 (日本標準時)
	//↑有効ではない
D2=new Date(1000);  //協定世界時(UTC)での 1970年 1 月 1 日午前 0 時 0 分 0 秒から1000ミリ秒で設定。
	//=[object]:Thu Jan 01 1970 09:00:01 GMT+0900 (日本標準時)

D=Date(0);
	//=[string]:Sun Dec 04 2022 16:28:58 GMT+0900 (日本標準時)
	//↑有効ではない
D2=Date(10000);
	//=[string]:Sun Dec 04 2022 16:28:58 GMT+0900 (日本標準時)
	//↑有効ではない
DA=Date("2020-10-05T19:23:30.123Z");
	//=[string]:Sun Dec 04 2022 16:50:09 GMT+0900 (日本標準時)
	//↑有効でない
DAN=new Date("2020-10-05T19:23:30.123Z");
	//=[object]:Tue Oct 06 2020 04:23:30 GMT+0900 (日本標準時)
DN=DAN.toISOString();  //=[string]:2020-10-05T19:23:30.123Z

//●1数値で設定
D=new Date(0);  //協定世界時(UTC)での 1970年 1 月 1 日午前 0 時 0 分 0 秒から0ミリ秒で設定。
	//=[object]:Thu Jan 01 1970 09:00:00 GMT+0900 (日本標準時)
DA=D.toISOString();   //=[string]:1970-01-01T00:00:00.000Z
D2=new Date(10000);  //協定世界時(UTC)での 1970年 1 月 1 日午前 0 時 0 分 0 秒から10000ミリ秒で設定。
	//=[object]:Thu Jan 01 1970 09:00:10 GMT+0900 (日本標準時)
DA2=D2.toISOString(); //=[string]:1970-01-01T00:00:10.000Z

//●ISO 8601: 地方時かUTCか?
D=new Date("2020-10-05T19:23:30.123");   //=[object]:Mon Oct 05 2020 19:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();   //=[string]:2020-10-05T10:23:30.123Z
D2=new Date("2020-10-05T19:23:30.123Z"); //=[object]:Tue Oct 06 2020 04:23:30 GMT+0900 (日本標準時)。UTC?
DA2=D2.toISOString(); //=[string]:2020-10-05T19:23:30.123Z。UTC?
DA=new Date("2020-10-05");   //
D=DA.getUTCHours();  //=[number]:0。UTC時刻。
DA=new Date("2020-10-05T00:00:00");   //
D=DA.getUTCHours();  //=[number]:15。時間は地方時だった。


//●ISO 8601: UTCの±HH:mm
D=new Date("2020-10-05T19:23:30+00:01");   //2020年10月5日 19時23分30秒で、UTCより1分後の時刻を設定?。
	//=[object]:Tue Oct 06 2020 04:22:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T19:22:30.000Z。UTC。

/●RFC 2822 による日付部、時刻部
D=new Date("10 5 2020");  //2020年10月5日で設定。
	//=[object]:Mon Oct 05 2020 00:00:00 GMT+0900 (日本標準時)。
DA=D.toISOString();  //=[string]:2020-10-04T15:00:00.000Z。UTC。

D=new Date("10 5 2020 19:23:30");  //2020年10月5日 19時23分30秒で設定。
	//=[object]:Mon Oct 05 2020 19:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T10:23:30.000Z。UTC。

//●RFC 2822 による ±hhmm
D=new Date("10 5 2020 19:23:30 -0000");  //2020年10月5日 19時23分30秒で、UTCよりずれていない位置の日時として設定。
	//=[object]:Tue Oct 06 2020 04:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T19:23:30.000Z
D=new Date("10 5 2020 19:23:30 -0001");  //2020年10月5日 19時23分30秒で、UTCより-1分の位置の日時として設定。
	//=[object]:Tue Oct 06 2020 04:24:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T19:24:30.000Z。UTC。
D=new Date("10 5 2020 19:23:30 +0001");  //2020年10月5日 19時23分30秒で、UTCより+1分の位置の日時として設定。
	//=[object]:Tue Oct 06 2020 04:22:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T19:22:30.000Z

//●RFC 2822 による GMT、UT
D=new Date("10 5 2020 19:23:30");  //2020年10月5日 19時23分30秒。
	//=[object]:Mon Oct 05 2020 19:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T10:23:30.000Z
D=new Date("10 5 2020 19:23:30 GMT");  //2020年10月5日 19時23分30秒でGMTとして?。
	//=[object]:Tue Oct 06 2020 04:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T19:23:30.000Z
D=new Date("10 5 2020 19:23:30 UT");  //2020年10月5日 19時23分30秒(UT)UTC?。
	//=[object]:Tue Oct 06 2020 04:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T19:23:30.000Z

//●2つ以上の数値で指定
D=new Date(2020, 9, 5, 19, 23, 30, 123);  //2020年10月5日 19時23分30秒で設定(地方時)。
	//=[object]:Mon Oct 05 2020 19:23:30 GMT+0900 (日本標準時)
DA=D.toISOString();  //=[string]:2020-10-05T10:23:30.123Z。UTC。

テスト