gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:20:03 26 4
gpt4 key购买 nike

我有这个简单的 Javascript 代码

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

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

提醒显示 Day 是 7!!... 为什么?我怎样才能做对? (问题仅在今天)

最佳答案

根据 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并输出

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

So, it's the same time in Unix time, only represented differently in your local timezone.

And yes, I know 8 October is a Saturday and DST change starts at Sunday, midnight, but this is the closest I can get.


Update: I can now reproduce your issue by setting the timezone of a WinXP machine to Santiago and let the OS automatically adjust for DST and alerting new Date(2011, 9, 9) (which is a Sunday and is shown as a Saturday; there must be something strange with your settings). Of course you can't control these settings on the client.

To work around this issue, I have to know what you exactly need: if you merely want some date/time display that doesn't take timezone and DST into account, just use UTC, like:

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

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

关于javascript - 在 Javascript Date 对象中存储日期的 DST 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com