【问题标题】:Why is Safari confused about Date.getDay() for DST start in Sydney, Aus time zone?为什么 Safari 对在澳大利亚悉尼时区的 DST 开始的 Date.getDay() 感到困惑?
【发布时间】:2013-01-28 03:42:32
【问题描述】:

OSX 上的 Safari 认为 2013 年 10 月 6 日是澳大利亚的星期六。不是,实际上是星期天。

要重现此问题,只需将您的时区设置为澳大利亚悉尼,在 Safari 中弹出开发控制台,然后输入新日期(“2013/10/06”)。你会得到这个:

现在更改为美国西雅图,您将得到:

这个问题也发生在澳大利亚墨尔本,但不发生在更北部的城市,例如布里斯班(适合 zoning for Australian DST),或者我在世界各地测试过的少数其他城市。

现在,恰好 2013 年 10 月 6 日是start of daylight savings time in Sydney.。其他年份的其他 DST 开始日期也犯了同样的错误。 DST 结束日期似乎没有问题。 PDT 时区的 DST 开始日期似乎没有问题。此外,Chrome 和 Firefox 也不会出现此问题。

我已经在两台不同的 Mac 上测试了其中的大部分内容,一台在带有 Safari 5.1.7 的 Snow Leopard 上,另一台在带有 Safari 6.0.2 的 Lion 上。

所以问题是——这是一个错误还是有某种合理的原因?

【问题讨论】:

  • 我在 Win7 下的 Safari 上的相同行为
  • 试试:d = new Date("2013-10-06"); d.setMinutes(d.getMinutes() + d.getTimezoneOffset())
  • 我的窍门是使用new Date(datestring+" 12:00").getDay(),它将时间固定在一天中,远离所有 DST 开关 (worldtimezone.com/daylight.html)。
  • @jlarson 你有更多关于这个/链接到苹果提交的错误的信息吗?不幸的是,我在 OSX Mavericks 和 iOS7 上都看到了与 Safari 相同的问题...
  • @Boycs 这是问题 ID #13201479。我没有从他们的错误报告者那里看到直接链接,但它应该通过搜索出现。 (呃,Apple 的开发者网络东西还是那么 *@!#)

标签: javascript safari timezone


【解决方案1】:

这确实应该被视为一个错误 - 从技术上讲,悉尼的 DST 于 2013 年 10 月 6 日凌晨 2 点开始,因此凌晨 2 点变成了凌晨 3 点 (http://www.timeanddate.com/worldclock/clockchange.html?n=240)。在这种情况下,Safari 似乎认为您的意思是 2013 年 10 月 6 日午夜 - 然后返回 1 小时到前一天晚上 11 点。这甚至没有意义,因为在凌晨 2 点,时钟应该提前一个小时。

我建议为此提交错误报告 - 因为输出明显错误

https://developer.apple.com/bugreporter/

【讨论】:

  • 是的,我已经提交了错误报告。我把它放在 SO 上的最大原因是任何其他试图弄清楚它的开发人员可能更容易遇到这些信息......
  • @jlarson 您是否有任何来自 Apple 的信息,何时修复此错误?我可以在 Safari 7.1 和 8.0 上重现它。谢谢。
  • 我认为,已向 Webkit 开发团队报告:bugs.webkit.org/show_bug.cgi?id=4930
  • 描述此行为的正确 Webkit 错误:bugs.webkit.org/show_bug.cgi?id=137003
  • 我在安曼/约旦也有同样的问题。如果您的系统时间在 DST 之外,并且您在 DST 内创建了一个日期对象,则不会应用偏移量并且您落后了几个小时。有时这会导致构建错误的日期。
猜你喜欢
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 2021-05-04
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多