为什么我会像2021年那样出现意想不到的岁月?
var dueDates = [];
var dDate = '2014-01-01';
dDate = new Date(dDate);
for (var i = 1; i <= 18; i++) {
dDate.setMonth(i);
dueDates.push(dDate);
}
console.log(dueDates);
答案 0 :(得分:3)
代码存在两个问题。
您一遍又一遍地将相同的Date对象推送到数组,因此最终会得到一个充满对单个Date对象的引用的数组。
您反复将月份值设置为高于11的值,这样也可以推动这些年。如果你{2015年1月}结束setMonth(12)
,那么你最终会在2016年2月结束setMonth(13)
。最后你将在2021年结束。
为每次迭代创建一个新的Date对象,并在其上设置月份,以便始终从同一日期开始:
var dueDates = [];
var dDate = '2014-01-01';
dDate = new Date(dDate);
for (var i = 1; i <= 18; i++) {
var d = new Date(dDate.getTime());
d.setMonth(i);
dueDates.push(d);
}
console.log(dueDates);
注意:当你开始使用setMonth(1)
时将是2月。如果你想从一月开始,你必须从零开始。