Javascript 日期对象和夏令时

标签 javascript date dst

我看到一些我不理解的 Javascript 日期对象和 DST 转换行为。如果我在 Chrome 的 javascript 控制台中执行以下命令

var date = new Date(1268535600000); //2010-03-14T03:00:00.000Z (21:00 03-13 America/Chicago) 
for(var i = 1; i <= 12; i++)
{   
    var time = date.getHours();
    console.log(time)
    console.log(date)
    date.setHours(date.getHours() + 1);         
}

输出是:

21
Sat Mar 13 2010 21:00:00 GMT-0600 (Central Standard Time)
22
Sat Mar 13 2010 22:00:00 GMT-0600 (Central Standard Time)
23
Sat Mar 13 2010 23:00:00 GMT-0600 (Central Standard Time)
0
Sun Mar 14 2010 00:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)

但是,将 for 循环的最后一行更改为

date = new Date(date.getTime() + 3600000)   

产生我期望的输出,并在转换时跳过一小时:

21
Sat Mar 13 2010 21:00:00 GMT-0600 (Central Standard Time)
22
Sat Mar 13 2010 22:00:00 GMT-0600 (Central Standard Time)
23
Sat Mar 13 2010 23:00:00 GMT-0600 (Central Standard Time)
0
Sun Mar 14 2010 00:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
3
Sun Mar 14 2010 03:00:00 GMT-0500 (Central Daylight Time)
4
Sun Mar 14 2010 04:00:00 GMT-0500 (Central Daylight Time)
5
Sun Mar 14 2010 05:00:00 GMT-0500 (Central Daylight Time)
6
Sun Mar 14 2010 06:00:00 GMT-0500 (Central Daylight Time)
7
Sun Mar 14 2010 07:00:00 GMT-0500 (Central Daylight Time)
8
Sun Mar 14 2010 08:00:00 GMT-0500 (Central Daylight Time)
9
Sun Mar 14 2010 09:00:00 GMT-0500 (Central Daylight Time)

第一种方法不起作用的原因是什么?

编辑: 此外,对于具有重复小时的 DST 转换,它似乎只是忽略了第一种方法的重复小时: 另一件事是,如果我尝试使用具有重复小时的 DST 转换,它似乎会忽略重复的小时:

Sun Nov 07 2010 00:00:00 GMT-0500 (Central Daylight Time)
Sun Nov 07 2010 01:00:00 GMT-0600 (Central Standard Time)
Sun Nov 07 2010 02:00:00 GMT-0600 (Central Standard Time)

但它使用第二种方法正确处理了重复的小时。

最佳答案

也许这是一个错误。您是否在多个浏览器上尝试过?

否则我猜,由于您试图将小时数设置为不存在的时间,因此它会拒绝更改。

关于Javascript 日期对象和夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4018320/

相关文章:

javascript - 在混合移动应用程序中启用拼写检查

java - 将 Java Date 从一种格式转换为另一种格式而不将其转换为字符串

javascript - Date.now() 未显示在表单中的占位符日期类型中 - angularjs

javascript - Javascript Date.getHours() 是否包括夏令时?

python - 为什么 Pandas 不会产生模糊的时间错误?

javascript - BreezeJS 中央错误处理程序和自动重试

javascript - 无法使用 updateNg1Component() 在 Angular 2 应用程序中使用 Angular 1 指令

javascript - throttleTime 运算符的配置参数如何工作? ( throttle 配置)

javascript - 如何从一组日期中获取最新日期? - JavaScript/ typescript

c# - 使用 NodaTime 将无效(跳过)的日期时间值转换为 UTC