全系列 JavaScript Date 对象?
我正在阅读有关各种实现中 JavaScript 日期对象的混合/最大值的信息。
Mozilla 文档称 JavaScript 支持“-100,000,000 天到 +100,000,000 两侧UNIX 时代的“。如果我的数学正确的话,两边应该都是 8.64e15 毫秒。
Microsoft MSDN 表示 JScript 支持“大约 285,616 年” UNIX 纪元。
Google v8 的单元测试表明 +/-1e8从纪元开始的天。
ECMAScript 5.1 指定得更清楚一些:
自 1970 年 1 月 1 日起,ECMAScript 中的时间以毫秒为单位进行测量 世界标准时间。在时间值中,闰秒被忽略。假设 每天正好有 86,400,000 毫秒。 ECMA 脚本编号 值可以表示从 –9,007,199,254,740,992 到 9,007,199,254,740,992;这个范围足以测量时间 大约范围内任何瞬间的毫秒精度 自 UTC 1970 年 1 月 1 日起,向前或向后 285,616 年。
ECMAScript Date 对象支持的实际时间范围是 稍小:正好 –100,000,000 天到 100,000,000 天 相对于 1970 年 1 月 1 日开始的午夜测量 世界标准时间。这给出了 8,640,000,000,000,000 毫秒的范围 UTC 时间 1970 年 1 月 1 日两侧
我很好奇,有谁知道任何不实际支持此“距纪元 +/-1e8 天”范围的实现吗?
I'm reading info on the mix/max values of JavaScript date objects in various implementations.
Mozilla docs say JavaScript supports "-100,000,000 days to +100,000,000 on either side" of the UNIX epoch. If my math is correct, this should be 8.64e15 ms on either side.
Microsoft MSDN says JScript supports "approximately 285,616 years on either side" of the UNIX epoch.
The unit tests for Google v8 indicate +/-1e8 days from epoch.
ECMAScript 5.1 specifies a little more clearly:
Time is measured in ECMAScript in milliseconds since 01 January, 1970
UTC. In time values leap seconds are ignored. It is assumed that
there are exactly 86,400,000 milliseconds per day. ECMAScript Number
values can represent all integers from –9,007,199,254,740,992 to
9,007,199,254,740,992; this range suffices to measure times to
millisecond precision for any instant that is within approximately
285,616 years, either forward or backward, from 01 January, 1970 UTC.The actual range of times supported by ECMAScript Date objects is
slightly smaller: exactly –100,000,000 days to 100,000,000 days
measured relative to midnight at the beginning of 01 January, 1970
UTC. This gives a range of 8,640,000,000,000,000 milliseconds to
either side of 01 January, 1970 UTC
I'm curious, does anyone know any implementation which do not actually support this "+/-1e8 days from epoch" range?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这适用于所有主要版本的浏览器:
结果:
Fri Sep 12 275760 20:00:00 GMT-0400(东部夏令时间)
这不起作用:
在 IE7/WinXP 上,我收到 js 错误。
This works on all major version browsers:
Results:
Fri Sep 12 275760 20:00:00 GMT-0400 (Eastern Daylight Time)
This does not work:
On IE7/WinXP I get js errors.
我怀疑今天是否有这样的实现。一旦支持整数范围,就没有理由不支持日期范围。而这个整数范围是 js 中 Number 类型的其他要求的副作用(参见标准中的 8.5,Number 基本上是 IEEE 754)。所以这一切都是一个包。这意味着,如果有这样的实现,很可能他们没有以正确的方式实现 Number,这是极不可能的。
I doubt there is such an implementation is use today. Once you support the integer range there's no reason not to support the date range. And that integer range is a side effect of the other requirements of the Number type in js (see 8.5 in the standard, Number is basically IEEE 754). So it's all kind of one package. Meaning, if there was such an implementation, most likely they aren't implementing Number in the correct fashion, which is highly unlikely.