我正在阅读有关各种实现中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天的任何实施?
答案 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,这是非常不可能的。