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);
我不认为这与我的环境有关,但是无论如何,这就是我要得到的:
你们得到不同的东西了吗?
答案
由于您正在使用UTC格式的日期,并且您要忽略当地时区更改(例如夏令时),您应该始终使用getUTCDate()和setUTCDate()。 UTC没有夏令时。
这是previous question的副本。
在我这边正常工作。
另一答案
这是注释很长的代码,所以决定做出一个答案:
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。一天不能增加。为什么? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript setTimeout / clearTimeout在电子中的怪异行为