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

DST problem storing date in Javascript Date object

本文关键字:日期 DST 问题 存储 Javascript date 对象      更新时间:2023-09-26

我有这个简单的Javascript代码

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

重要提示:我的时区是"Santiago de Chile",我将电脑时钟设置为:2-Oct-2011。

提醒显示当天是7日!!为什么?我怎样才能做对呢?(问题只在这一天)

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

这意味着,正如我之前链接到的脚本所显示的那样,在您的时区2011年10月8日午夜不能用UTC-0300表示,因此它会自动切换到UTC-0400来表示相同的时间。

我可以重现你的问题在我的时区(阿姆斯特丹,UTC+1/2h)通过要求星期日2011年3月27日,上午2:00(与当前时区CEST=UTC+0200)(在夏令时(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时间中是相同的时间,只是在您的本地时区中表示不同。

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


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

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

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

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