web-dev-qa-db-ja.com

最小および最大日付

Javascript Dateオブジェクトに許可される日付の最小値と最大値はどちらなのか疑問に思っていました。最小日付は紀元前200000年のようなものであることがわかりましたが、それについての参照を得ることができませんでした。

誰もが答えを知っていますか?ブラウザに依存しないことを願っています。

「エポック時間」(= 1970-01-01 00:00:00 UTC + 00からのミリ秒)での回答が最適です。

116
MaxArt

仕様、§15.9.1.1 から:

Dateオブジェクトには、特定の瞬間を1ミリ秒以内に示す数値が含まれています。このような数値は時間値と呼ばれます。時間値は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の午前0時を基準にして正確に–100,000,000日から1億日です。これにより、1970年1月1日UTCの両側に8,640,000,000,000,000ミリ秒の範囲が与えられます。

UTC UTC 1970年1月1日の午前0時の正確な瞬間は、値+0で表されます。

3番目の段落が最も関連性があります。その段落に基づいて、仕様ごとに正確な最も早い日付をnew Date(-8640000000000000)から取得できます。これは4月20日火曜日、271,821 BCE(BCE = Before Common Era 、たとえば-271,821年です) )。

157
T.J. Crowder

T.J.の回答を増やすために、最小/最大値を超えると無効な日付が生成されます。

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
39
Shaun Luttin