11

“在“能源危机”年代,国会制定了更早的日光时间开始日期。1974 年,日光时间从 1 月 6 日开始,1975 年从 2 月 23 日开始。在这两年之后,开始日期又回到了四月。”
(来自http://aa.usno.navy.mil/faq/docs/daylight_time.php

这些日期的 Javascript 日期对象中似乎存在错误。如果您将 127627200000 毫秒转换为日期,则应该是 Thu Jan 17 00:00:00 EDT 1974。这在http://www.fileformat.info/tip/java/date2millis.htm上是正确的,但在 http 上不正确: //www.esqsoft.com/javascript_examples/date-to-epoch.htm,它表示它转换为 1974 年 1 月 16 日星期三 23:00:00 GMT-0500(东部标准时间)。如果您在 javascript 中创建一个新的 Date(127627200000) 对象,它会提供后一种日期转换。这发生在所有主要浏览器中。

我无法想象这是第一次这对任何人来说都是一个问题,但是通过在线搜索我找不到任何其他有关此问题的案例。有谁知道是否有针对此问题的现有修复程序或更简单的修复程序,而不是手动检查 Javascript 转换错误的日期?还有其他日期这是一个问题吗?

4

2 回答 2

13

和以往一样,最好检查一下规格:)

在这种情况下,在ECMA-262的第 15.9.1.9 节中看到这一点,我感到非常震惊:

ECMAScript 的实现不应该试图确定确切的时间是否受夏时制的影响,而应该确定如果当时使用了当前的夏令时算法,夏令时是否会生效。这避免了复杂性,例如考虑到区域设置全年观察夏令时的年份。

换句话说,一个符合 ECMAScript 的实现不允许在历史上是准确的。

现在是否所有实现都遵循这一点,我不确定......但它确实建议你需要某种单独的库,如果你想获得历史上准确的时区......其中“历史上准确”不当然,必须几乎可以追溯到 1974 年:美国在 2007 年改变了 DST 时间表,而其他国家最近也这样做了(而且警告较少)。


1 15.9.1.9 的第一次出现。由于某种原因,它发生了两次——一次是“夏令时调整”,一次是“当地时间”。哇。

于 2010-01-19T19:57:24.197 回答
0

Java 有历史时区(回溯到 1920 年左右),JavaScript 显然没有。

于 2010-01-19T19:47:33.380 回答