全系列的JavaScript Date对象?

时间:2011-10-03 21:32:33

标签: javascript datetime ecmascript-5

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

Mozilla docs称,JavaScript支持UNIX时代的“-100,000,000 days to +100,000,000”。如果我的数学是正确的,那么任何一方都应该是8.64e15毫秒。

Microsoft MSDN表示JScript支持UNIX纪元的“approximately 285,616 years”。

Google v8的单元测试表明来自纪元的+/-1e8 days

ECMAScript 5.1 specifies a little more clearly

  

自1970年1月1日起,时间以ECMAScript为单位,以毫秒为单位   世界标准时间。在时间值中,忽略闰秒。假设是   每天正好有86,400,000毫秒。 ECMAScript编号   值可以表示从-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毫秒的范围   1970年1月1日,UTC的任何一方

我很好奇,有没有人知道实际上支持这个“从纪元”+范围内的+/- 1e8天的任何实施?

2 个答案:

答案 0 :(得分:4)

这适用于所有主流版本的浏览器:

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

结果:

Fri Sep 12 275760 20:00:00 GMT-0400(东部夏令时间)

这不起作用:

d.setTime(8640000000000001);

在IE7 / WinXP上,我收到了js错误。

答案 1 :(得分:3)

我怀疑今天有这样的实现。一旦支持整数范围,就没有理由不支持日期范围。并且该整数范围是js中Number类型的其他要求的副作用(参见标准中的8.5,Number基本上是IEEE 754)。所以这是一个包。意思是,如果有这样的实现,很可能他们没有以正确的方式实现Number,这是非常不可能的。