4

さまざまな実装における JavaScript 日付オブジェクトの mix/max 値に関する情報を読んでいます。

Mozilla のドキュメントによると、JavaScript はUNIX エポックの「 -100,000,000 日から +100,000,000 日まで」をサポートしています。私の計算が正しければ、これは両側で 8.64e15 ミリ秒になるはずです。

Microsoft MSDN によると、JScript はUNIX エポックの「両側で約 285,616 年」をサポートしています。

Google v8 の単体テストは、エポックから+/-1e8 日を示しています。

ECMAScript 5.1では、もう少し明確に指定されています

時間は、1970 年 1 月 1 日 UTC からのミリ秒単位で ECMAScript で測定されます。時間値ではうるう秒は無視されます。1 日あたり正確に 86,400,000 ミリ秒あると想定されます。ECMAScript Number 値は、–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 日から 100,000,000 日です。これにより、1970 年 1 月 1 日 UTC の両側に 8,640,000,000,000,000 ミリ秒の範囲が与えられます。

この「エポックから +/-1e8 日」の範囲を実際にサポートしていない実装を知っている人はいますか?

4

2 に答える 2

4

これは、すべてのメジャー バージョンのブラウザーで機能します。

var d = new Date();
d.setTime(8640000000000000);
document.write(d);

結果:

金 9 月 12 日 275760 20:00:00 GMT-0400 (東部夏時間)

これは動作しません:

d.setTime(8640000000000001);

IE7/WinXP で js エラーが発生します。

于 2011-10-03T21:35:42.310 に答える
3

そのような実装が今日使用されているとは思えません。整数範囲をサポートすると、日付範囲をサポートしない理由はありません。そして、その整数範囲は、jsのNumber型の他の要件の副作用です(標準の8.5を参照、Numberは基本的にIEEE 754です)。つまり、すべてが1つのパッケージです。つまり、そのような実装があった場合、それらはNumberを正しい方法で実装していない可能性が高く、これはほとんどあり得ません。

于 2011-10-03T21:41:40.410 に答える