Safari には、1970年以前のDateが西半球で1ミリ秒ずれるバグがある
2609 ワード
Safari の JavaScript エンジンには、バグがあるようだ。
Safari では、時間帯が負の数のときに、
1970年以前の ISO 8601 (W3C DateTime) 表記の日時文字列を
Date に突っ込むと、時刻が1ミリ秒ズレてしまう。
new Date("1969-12-31T23:59:59.999+01:00").toJSON();
// OK! => "1969-12-31T22:59:59.999Z"
new Date("1969-12-31T23:59:59.999-01:00").toJSON();
// NG! => "1970-01-01T00:59:59.998Z"
本来なら 59.999 秒のところ、59.998 秒となる。
きっと、計算途中で小数点以下の丸め誤差が発生しているんだろう。
タイムゾーン | 1970年以降 | 1969年以前 |
---|---|---|
+00:00 以上(東半球) | ✅ OK | ✅ OK |
-00:00 未満(西半球) | ✅ OK | ❌ NG |
以下のコードでバグ有無を判別できる。→ gist
function checkDateBug() {
var date = +new Date("1969-12-31T23:59:59.999-01:00");
return date % 1000 !== 999;
}
JavaScript で 64bit の time_t
とナノ秒を扱うクラスを書いています。
https://www.npmjs.com/package/timestamp-nano
Author And Source
この問題について(Safari には、1970年以前のDateが西半球で1ミリ秒ずれるバグがある), 我々は、より多くの情報をここで見つけました https://qiita.com/kawanet/items/b081030911a12531561a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .