DST问题在Javascript Date对象中存储日期

时间:2011-05-02 16:54:33

标签: javascript date dst

我有这个简单的Javascript代码

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

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

警报显示Day是7 !!为什么?我怎么能做对的? (问题只在这一天)

1 个答案:

答案 0 :(得分:0)

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

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

我可以通过询问Sun 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 并输出

Sun Mar 27 2011 01:00:00 GMT+0100 (CET)

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

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


更新:我现在可以通过将WinXP计算机的时区设置为Santiago 来重现您的问题,并且让操作系统自动调整DST 警告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