这是因为您提供的日期格式new Date()
是非标准的。您得到任何东西的事实是因为 Safari 正在帮您一个忙。(有关有效格式,请参阅规范的第 15.9.1.15 节;基本上是简化的 ISO-8601。并且有任何解析日期/时间字符串的标准是相对较新的 [第 5 版]。)
如果您使用标准构造函数,例如new Date (22034, 2, 1)
(月份从零开始,即 22034 年 3 月 1 日),它可以正常工作。您可以像这样测试它(实时副本):
display("With non-standard string: " + new Date("1 Mar 22034"));
display("Using standard constructor: " + new Date(22034, 2, 1));
对我来说,使用 Safari for Windows 会导致:
使用非标准字符串:Tue Feb 28 22034 00:00:00 GMT+0000(GMT 标准时间)
使用标准构造函数:Wed Mar 01 22034 00:00:00 GMT+0000(GMT 标准时间)
如您所见,第一行显示了错误的日期,而第二行显示了正确的日期。
标准构造函数在 Chrome、Opera 和 Firefox(都在 Ubuntu 下)、IE6、IE7 和 IE8 中也能正常工作:http: //jsbin.com/ogiqu
如果 Safari 确实无法处理该日期(而不是无法可靠地解析您提供给它的非标准字符串),那将是一个令人惊讶的 Safari 特定错误。从规范的第 15.9.1.1 节:
自 1970 年 1 月 1 日 UTC 以来,时间在 ECMAScript 中以毫秒为单位进行测量。在时间值中,闰秒被忽略。假设每天正好有 86,400,000 毫秒。ECMAScript Number 值可以表示从 –9,007,199,254,740,991 到 9,007,199,254,740,991 的所有整数;该范围足以测量从 1970 年 1 月 1 日 UTC 起大约 285,616 年(向前或向后)内的任何时刻的毫秒精度。
但是,当您不要求它离开滑雪道时,Safari 似乎可以很好地处理它,显然问题出在非标准字符串的解析代码中。