Date
Javascriptオブジェクトに許可されている最小日と最大日はどれか疑問に思いました。最小の日付は紀元前200000のようなものであることがわかりましたが、それについての参照を取得できませんでした。
誰かが答えを知っていますか?ブラウザに依存しないことを願っています。
「エポックタイム」(= 1970-01-01 00:00:00 UTC + 00からのミリ秒)での回答が最適です。
Date
Javascriptオブジェクトに許可されている最小日と最大日はどれか疑問に思いました。最小の日付は紀元前200000のようなものであることがわかりましたが、それについての参照を取得できませんでした。
誰かが答えを知っていますか?ブラウザに依存しないことを願っています。
「エポックタイム」(= 1970-01-01 00:00:00 UTC + 00からのミリ秒)での回答が最適です。
仕様から、§15.9.1.1:
Dateオブジェクトには、ミリ秒以内の特定の瞬間を示す数値が含まれています。このような数値は時間値と呼ばれます。時間値はNaNの場合もあり、Dateオブジェクトが特定の時刻を表していないことを示します。
時間は、1970年1月1日UTCからのミリ秒単位のECMAScriptで測定されます。時間値では、うるう秒は無視されます。1日あたり正確に86,400,000ミリ秒あると想定されています。ECMAScript数値は、–9,007,199,254,740,992から9,007,199,254,740,992までのすべての整数を表すことができます。この範囲は、1970年1月1日UTCから、順方向または逆方向のいずれかで約285、616年以内の任意の瞬間のミリ秒単位の精度で時間を測定するのに十分です。
ECMAScript Dateオブジェクトでサポートされる実際の時間範囲はわずかに小さく、1970年1月1日UTCの真夜中を基準にして正確に–100、000、000日から1億日です。これにより、1970年1月1日UTCのいずれかの側に8,640,000,000,000,000ミリ秒の範囲が与えられます。
1970年1月1日UTCの初めの真夜中の正確な瞬間は値+0で表されます。
3番目の段落が最も関連性があります。その段落に基づいて、仕様ごとの正確な最も早い日付を、から取得できますnew Date(-8640000000000000)
。これは、紀元前271、821年4月20日火曜日です(西暦前=西暦前、たとえば-271、 821年)。
TJの回答を補強するために、最小/最大値を超えると無効な日付が生成されます。
let maxDate = new Date(8640000000000000);
let minDate = new Date(-8640000000000000);
console.log(new Date(maxDate.getTime()).toString());
console.log(new Date(maxDate.getTime() - 1).toString());
console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date
console.log(new Date(minDate.getTime()).toString());
console.log(new Date(minDate.getTime() + 1).toString());
console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date
受け入れられた答えの小さな修正。次のスニペットを実行するとわかるように、最小日付の年は実際には西暦前271 、82年です。
console.log(new Date(-8640000000000000).toLocaleString("en", {"year": "numeric", "era": "short"}))
実際、JavaScriptは( ISO 8601Date
とともに)天文学的年番号を使用しており、これは0年を使用しているため、-271,821年は実際には西暦前271、822年です。したがって、1年目は1 CE、0年目は1 BCE、1年目は2BCEなどです。
ご覧のとおり、1970年1月1日は0を返します。これは、可能な限り低い日付であることを意味します。
new Date('1970-01-01Z00:00:00:000') //returns Thu Jan 01 1970 01:00:00 GMT+0100 (Central European Standard Time)
new Date('1970-01-01Z00:00:00:000').getTime() //returns 0
new Date('1970-01-01Z00:00:00:001').getTime() //returns 1