我有以下代码:
var d = new Date('2016-03-27');
console.log(d.getDate(), d);
d.setDate(d.getDate() + 1);
console.log(d.getDate(), d);
Run Code Online (Sandbox Code Playgroud)
这给出了错误的答案:
27 Date 2016-03-27T00:00:00.000Z
28 Date 2016-03-27T23:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
注意第二行日期不匹配。似乎它增加了 24 小时而不是一天。语言环境是拉脱维亚,当天时间更改了 1 小时。
正确答案将是:
28 Date 2016-03-28T00:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
由于您使用的是 UTC 格式的日期,并且您想忽略本地时区更改(例如夏令时),因此您应该始终使用getUTCDate()
和setUTCDate()
。UTC 没有夏令时。
var d = new Date('2016-03-27');
console.log(d.getUTCDate(), d);
d.setUTCDate(d.getUTCDate() + 1);
console.log(d.getUTCDate(), d);
Run Code Online (Sandbox Code Playgroud)
如果您有更复杂的需求,还可以考虑 JavaScript 日期库,例如moment.js。