Javascript怪异日期行为于2017-03-26。一天不能增加。为什么? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript怪异日期行为于2017-03-26。一天不能增加。为什么? [重复]相关的知识,希望对你有一定的参考价值。

下面的代码段是怎么回事?我试图建立一个字符串数组作为从过去一天开始的日期。例如,我能够在整个2019年做到这一点。但是当我以2017-01-01开始时,我无法将日期增加到2017-03-26之后。

我可以毫无问题地将2017-03-27递增到2017-03-28。为什么会这样?

const currentDay = "2017-01-01";
const nextDay = new Date(new Date(currentDay).setDate(new Date(currentDay).getDate() + 1)).toISOString().split("T")[0];

console.log('currentDay: ' + currentDay);
console.log('nextDay: ' + nextDay);

const currentDay2 = "2017-03-26";
const nextDay2 = new Date(new Date(currentDay2).setDate(new Date(currentDay2).getDate() + 1)).toISOString().split("T")[0];

console.log('currentDay2: ' + currentDay2);
console.log('nextDay2: ' + nextDay2 + '<------ DOES NOT INCREMENT');

const currentDay3 = "2017-03-27";
const nextDay3 = new Date(new Date(currentDay3).setDate(new Date(currentDay3).getDate() + 1)).toISOString().split("T")[0];

console.log('currentDay3: ' + currentDay3);
console.log('nextDay3: ' + nextDay3);

我不认为这与我的环境有关,但是无论如何,这就是我要得到的:

enter image description here

你们得到不同的东西了吗?

答案

由于您正在使用UTC格式的日期,并且您要忽略当地时区更改(例如夏令时),您应该始终使用getUTCDate()和setUTCDate()。 UTC没有夏令时。

这是previous question的副本。

在我这边正常工作。

enter image description here

另一答案

这是注释很长的代码,所以决定做出一个答案:

const currentDay2 = "2017-03-26";
let [y,M,d] = currentDay2.split(/[-]/);
const nextDay2 = new Date(y, (+M - 1), ++d).toISOString();
console.log(nextDay2);

以上是关于Javascript怪异日期行为于2017-03-26。一天不能增加。为什么? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

访问:DSUM 行为怪异

Javascript setTimeout / clearTimeout在电子中的怪异行为

估计HeightForHeaderInSection 行为怪异

jQuery slick 滑块行为怪异

fstream 行为怪异

JFrame 行为怪异