回答:
仕様から、§15.9.1.1:
Dateオブジェクトには、ミリ秒以内の特定の瞬間を示す数値が含まれています。このような数値は時間値と呼ばれます。時間値はNaNの場合もあり、Dateオブジェクトが特定の瞬間を表していないことを示します。
時間はECMAScriptで1970年1月1日UTCからミリ秒で測定されます。時間の値では、うるう秒は無視されます。1日あたり正確に86,400,000ミリ秒であると想定されています。ECMAScript数値は、–9,007,199,254,740,992から9,007,199,254,740,992までのすべての整数を表すことができます。この範囲は、UTC 1970年1月1日から前方または後方に約285,616年以内の任意の瞬間の時間をミリ秒の精度で測定するのに十分です。
ECMAScriptのDateオブジェクトがサポートする実際の時間範囲はわずかに小さくなります。1970年1月1日のUTCの初めの真夜中と比較して、正確に–100,000,000日から100,000,000日です。これにより、1970年1月1日UTCのいずれかの側に8,640,000,000,000,000ミリ秒の範囲が与えられます。
1970年1月1日UTCの初めの真夜中の正確な瞬間は、値+0で表されます。
3番目の段落が最も関連性があります。その段落に基づいて、仕様から正確な最も早い日付をから取得できますnew Date(-8640000000000000)
。これは、紀元前271,821年4月20日火曜日(BCE = 共通時代の前、たとえば-271,821年)です。
Date.UTC(-271821, 3, 20)
返します-8640000000000000
。:-)
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
ご覧のとおり、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