我有这个简单的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 !!为什么?我怎么能做对的? (问题只在这一天)
答案 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。