在 Javascript 中“d.setDate(d.getDate() + 1)”在时间改变的日子里给出了错误的答案

Som*_*ium 2 javascript date

我有以下代码:

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)

我该如何解决这个问题?

Owe*_*wen 6

由于您使用的是 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