【问题标题】:DST problem storing date in Javascript Date objectDST问题在Javascript Date对象中存储日期
【发布时间】:2011-05-03 05:01:20
【问题描述】:

我有这个简单的 Javascript 代码

var d = new Date(2011, 9, 8);
alert(d); // Show: Fri Oct 7 23:00:00 UTC-0400 2011

重要提示:我的时区是“智利圣地亚哥”,我将计算机时钟设置为:2011 年 10 月 2 日。

提示显示第 7 天!!...为什么?我怎样才能做到正确? (问题只在这一天)

【问题讨论】:

  • 您确定如果您使用new Date(2011, 9, 7),它也会显示为Fri Oct 7 …?否则会是时区问题。
  • 100% 确定...将时区设置为“智利圣地亚哥”以查看问题
  • 啊!如果您将其设置为 2011 年 10 月 8 日之后的日期?此外,您在什么系统上对此进行测试?
  • 我在 Windows(xp 和 2003)中测试它。问题只是这一天。这一天 goberment chage 日期使用夏季(或冬季......在不知道)日光时间。
  • 奇怪。您可以尝试从this question 运行脚本(当然,以Date(2011, 9, 7, 20, 0, 0, 0) 开头)并将其输出包含在您的问题中吗?

标签: javascript date dst


【解决方案1】:

根据this page,智利的 DST 更改总是在 10 月的第二个完整周末并从午夜开始(让我们忽略今年延长的 DST,因为您的计算机很可能不知道它)。

这意味着,正如使用脚本 I linked to earlier 所显示的那样,在您的时区 2011 年 10 月 8 日午夜不能用 UTC-0300 表示,因此它会自动切换到 UTC-0400 表示同一时间。

我可以通过询问 2011 年 3 月 27 日星期日凌晨 2:00(当前时区 CEST=UTC+0200)在我的时区(阿姆斯特丹,UTC+1/2h)重现您的问题(夏令时 (CEST) 开始的时间,时钟从 UTC+0100 调整为 UTC+0200)(记住这在北半球正好相反))

new Date(2011, 2, 27, 2, 0, 0, 0);

实际上无法用UTC+0200表示,所以系统选择UTC+0100输出

2011 年 3 月 27 日星期日 01:00:00 GMT+0100 (CET)

所以,Unix time 中的时间相同,只是在您当地的时区中表示不同。

是的,我知道 10 月 8 日是星期六,DST 更改从星期日午夜开始,但这是我能得到的最接近的日期。


更新:我现在可以通过将 WinXP 机器的时区设置为圣地亚哥来重现您的问题让操作系统自动调整 DST alerting new Date(2011, 9, 9)(这是星期日,显示为星期六;您的设置一定有什么奇怪的地方)。当然你不能在客户端控制这些设置。

要解决这个问题,我必须知道您到底需要什么:如果您只是想要一些不考虑时区和 DST 的日期/时间显示,只需使用 UTC,例如:

var d = new Date(Date.UTC(2011, 9, 9));
alert(d.toUTCString()); // Shows: Sun, 9 Oct 2011 00:00:00 UTC

要显示/计算 Date 对象的各个部分,请使用相应的 UTC methods

【讨论】:

  • 感谢您的解释。现在我知道问题所在,我知道为什么,但我不知道解决方案:(
  • 谢谢 Marcel... 我觉得你的解决方案非常好,我可以像模式一样使用它。
猜你喜欢
  • 2018-10-10
  • 1970-01-01
  • 2019-10-31
  • 2014-07-01
  • 2012-06-30
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多