为什么我会遇到意想不到的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);
演示http://jsfiddle.net/gQ92L/
最佳答案
代码有两个问题。
您将相同的Date对象一遍又一遍地推到数组中,因此最终将得到一个充满了对单个Date对象的引用的数组。
您反复将月份值设置为大于11的值,这样也将使年份向前推进。当您执行setMonth(12)
时,您将在2015年1月结束,而当您执行setMonth(13)
时,您将在2016年2月结束。最终您将达到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月。如果要从一月开始,则必须从零开始。