[如果没有明确说明问题,请帮我改进标题]
当我开发一个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)
所以,它不是每年都有!为什么这些日期特别?
答案 0 :(得分:7)
每年4月/ 5月和9月,它会为您提供不同的GMT抵消。这是夏令时。
中国内战后,1949年统一时区-GMT + 8- 由中华民国成立的所有领土, 叫北京时间(有时称为中国标准时间)。 从1986年到1991年观察到夏令时。
这不是问题。时间是对的。时间偏移只会改变。忽略它,所有计算都将正常工作。
P.S。这是我第一次研究中国内战的堆栈溢出。
答案 1 :(得分:0)
在当地时区使用夏令时日历的每年两天(开始和结束)。
仅在1986年至1991年间在中国观察夏令时,所以我在中国时区运行了代码我得到了上述结果。
但如果我将时区改为伦敦时间,我会得到不同的输出,几乎每年都有两天,即三月和十月。
您可以在不同的时区运行该代码以查看差异。