最小日と最大日


128

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

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

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


コピーのために/答えを貼り付けます。stackoverflow.com/questions/27093130/...
Kieveli

回答:


177

仕様から、§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年)です。


1
これは、.netのようなisMin isMaxフィールドに影響を与えました... gist.github.com/QueueHammer/cb9bf736b81029d65485fb30ad01918d
QueueHammer

1
それが-9223372036854775808Lで動作しない理由です...これを日付に変更した後でも、Reseverは正の範囲外の値を返します。
deadManN 2016年

1
私は人々が不満を言っているのかわかりません、これは私にとってはうまくいきます。ところで、これが逆に機能する方法はありますか(つまり、BCE日付を入力し、エポック秒を負のintとしてポップする)。
Mark Seagoe

1
@MarkSeagoe-をDate.UTC(-271821, 3, 20)返します-8640000000000000。:-)
TJクロウダー

新しい日付( '275760-9-13 05:30:00')
AshTyson

52

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


-8

ご覧のとおり、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

9
あなたの答えのポイントは何ですか?元の質問にはどう答えますか?
MaxArt 2018

1970年1月1日は、可能な最低日付ではありません。負の数を渡すと、1970年1月1日より前の日付を取得できます。
inejwstine
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.