4

我正在阅读有关各种实现中 JavaScript 日期对象的混合/最大值的信息。

Mozilla 文档说 JavaScript 支持 UNIX 时代的“ -100,000,000 天到 +100,000,000 天”。如果我的数学是正确的,这应该是两边的 8.64e15 毫秒。

微软 MSDN 说 JScript 支持 UNIX 时代的“大约 285,616 年”。

Google v8 的单元测试表明距纪元+/-1e8 天。

ECMAScript 5.1规定得更清楚一点

自 1970 年 1 月 1 日 UTC 以来,时间在 ECMAScript 中以毫秒为单位进行测量。在时间值中,闰秒被忽略。假设每天正好有 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 开始时的午夜,精确地测量 –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)。所以这都是一个包。意思是,如果有这样的实现,很可能他们没有以正确的方式实现 Number,这是极不可能的。

于 2011-10-03T21:41:40.410 回答