【问题标题】:Time difference between chrome / edge on windows 10Windows 10 上 chrome / edge 之间的时差
【发布时间】:2017-02-07 06:24:07
【问题描述】:

我在 Windows 10 上发现 Chrome 和 Edge 之间的 TZ 差异。 当我在控制台中运行此代码时:

> var date = new Date(2013, 2, 29, 1, 0, 0, 0);
> date

这将是在 Edge 上运行时的输出

> [date] Fri Mar 29 2013 01:00:00 GMT+0200 (Jerusalem Standard Time)

虽然这将是 Chrome 上的输出:

> [date] Fri Mar 29 2013 01:00:00 GMT+0300 (Jerusalem Daylight Time)

似乎在 Chrome 中它被识别为 DST,但在 Edge 中却没有,这是正确的。
(Attached screenshot)

如果我关闭“自动调整夏令时”配置 - Chrome 日期变得相同。 (image2)

谁能解释一下为什么?以及如何在任何“日期和时间”配置中在 chrome 中获得正确的 TZ?

边缘版本:20.10240.16384.0 Chrome 版本:56.0.2924.75(64 位)

【问题讨论】:

  • 标记为离题,因为这与编程无关,而是与一般软件配置有关。
  • @nicovank - 我不同意。这显然是浏览器问题,截图中有代码。 Noam - 请将代码也直接放在问题中。
  • 感谢@MattJohnson
  • 这是一种非常奇怪的行为,肯定与 IMO 编程有关

标签: google-chrome timezone microsoft-edge


【解决方案1】:

这确实是一个错误。

TZ Database shows:

# As of 2013, DST starts at 02:00 on the Friday before the last Sunday
# in March.  DST ends at 02:00 on the last Sunday of October.

# Rule  NAME  FROM  TO   TYPE  IN   ON       AT    SAVE  LETTER/S
Rule    Zion  2013  max  -     Mar  Fri>=23  2:00  1:00  D
Rule    Zion  2013  max  -     Oct  lastSun  2:00  0     S

# Zone    NAME            GMTOFF    RULES   FORMAT  [UNTIL]
Zone    Asia/Jerusalem    2:20:54   -       LMT     1880
                          2:20:40   -       JMT     1918    # Jerusalem Mean Time?
                          2:00      Zion    I%sT

因此,在 2013 年,DST 应该在 3 月最后一个星期日之前的星期五开始,也就是 3 月 29 日。(上一个星期五是 3 月 22 日,不符合时区数据中的Fri>=23 规则.) This is date is also corroborated by timeanddate.com.

Windows 似乎有正确的数据。检查注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time\Dynamic DST

我用绿色突出显示的最后一部分是 DST 开始日期。

00 00 = Year        (ignored)
03 00 = Month       (March)
05 00 = Day of week (Friday)
05 00 = Day number  (5 = last)
02 00 = Hour        (02:00)
00 00 = Minute
00 00 = Second
00 00 = Millisecond

因此,Windows 和 IANA 数据都指向同一日期。然而不知何故,Chrome 搞错了。

我还测试了 FireFox,但似乎也弄错了:

我也可以在 Node.js 中重现这些结果。

但是是的,Edge 是正确的:

请注意,浏览器在调整本地时间的方向上也有所不同,该本地时间落入由弹簧向前转换产生的“间隙”中。这是意料之中的,is being worked on in for a future version the of ECMAScript spec

我不从事这些浏览器中的实际实现,但我的理解是 Chrome、Node 和 FireFox 都依赖ICU 来实现它们的时区内部。 我的猜测是这里暴露的是一个 ICU 错误。 更新:这似乎是 Microsoft C/C++ 中的一个错误运行。我正在努力将它提供给合适的人。

至于如何处理 - 如果准确的历史时区数据对您的应用程序至关重要,我强烈建议您不要依赖环境来提供它,而是使用我列出的库之一自己带来它 @987654329 @,例如moment-timezone(我帮助维护)。

【讨论】:

  • 感谢@MattJohnson 的详细解答!两个 cmets: 1. 我们应该为 Chrome 和 FF 打开一个错误吗? 2. 我测试的具体日期不是随机的。此library 使用它。我也会在那里提到这个问题
  • Chrome 错误报告here,FireFox 错误报告here。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2021-08-23
  • 2020-01-18
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多