为什么这些日期设定(第 1天)不增加24小时



[如果不清晰地描述问题,请帮助我改进标题]


当我开发一个jQuery插件时,我发现了这个奇怪的东西:

var a = new Date('1986-05-03');
a.setHours(0,0,0,0);
// a = Sat May 03 1986 00:00:00 GMT+0800 (CST)
a.setDate( a.getDate() + 1 );
// a = Sat May 03 1986 23:00:00 GMT+0800 (CST)

它实际上增加了23小时

还有其他一些票上提到的日光节省,但是5月3日不是夏令时的开始,对

此外,我尝试打印所有不24小时的日期,这是我的代码:

var start = new Date('1900-01-01'); // FYI, IE8- doesn't support this kind of date construction
var end = new Date('2014-01-01');
start.setHours(0,0,0,0);
end.setHours(0,0,0,0);
while (start.getTime() < end.getTime()) {
    var oneMoreDay = new Date(start.getTime()); 
    oneMoreDay.setDate(start.getDate() + 1);
    var diff = oneMoreDay.getTime() - start.getTime();
    if (diff != 86400000) {
        console.log(start);
    }
    start = oneMoreDay;
} 

这是输出:

Sat May 03 1986 23:00:00 GMT+0800 (CST) VM124:12
Fri Sep 12 1986 23:00:00 GMT+0900 (CST) VM124:12
Sat Apr 11 1987 23:00:00 GMT+0800 (CST) VM124:12
Fri Sep 11 1987 23:00:00 GMT+0900 (CST) VM124:12
Sat Apr 09 1988 23:00:00 GMT+0800 (CST) VM124:12
Fri Sep 09 1988 23:00:00 GMT+0900 (CST) VM124:12
Sat Apr 15 1989 23:00:00 GMT+0800 (CST) VM124:12
Fri Sep 15 1989 23:00:00 GMT+0900 (CST) VM124:12
Sat Apr 14 1990 23:00:00 GMT+0800 (CST) VM124:12
Fri Sep 14 1990 23:00:00 GMT+0900 (CST) VM124:12
Sat Apr 13 1991 23:00:00 GMT+0800 (CST) VM124:12
Fri Sep 13 1991 23:00:00 GMT+0900 (CST) 

所以,不是每年!为什么这些日期特别?

是每年4月/5月和9月,它为您提供了不同的GMT偏移。那是日光节省。

来自Wikipedia:

中国内战之后,1949年,一个统一的时区(GMT 8) 由中华人民共和国为其所有领土建立 称为北京时间(有时称为中国标准时间)。 从1986年至1991年观察到夏令时。

这不是问题。时间是正确的。时间偏移只会改变。忽略它,所有计算都可以正常工作。

P.S。那是我第一次不得不研究中国内战以堆积堆积。

每年使用日期储蓄日历为两天(开始和结束)。

只有从1986年到1991年在中国才观察到夏令时,所以我在中国时区运行了代码,我得到了上述结果。

但是,如果我将自己的时区更改为伦敦时间,我将获得不同的输出,几乎是每年,三月和十月的两天。

您可以在不同时区运行该代码以查看差异。

最新更新