我正在编写一个简单的javascript函数,但它并不像我预期的那样。
以下是代码:
var startDate = new Date('2015-07-01 00:00 +0800');
var endDate = new Date('2015-07-10 00:00 +0800');
var arrayOfDates = [];
if (endDate >= startDate) {
while (startDate < endDate) {
arrayOfDates.push(startDate);
startDate = new Date(startDate.setDate(startDate.getDate() + 1));
}
}
虽然我期待arrayOfDates
的结果为[2015-07-01, 2015-07-02, 2015-07-03.... , 2015-07-10']
。结果是[2015-07-02, 2015-07-03.... , 2015-07-10']
为什么?在将变量推送到数组之前,是否以某种方式更新了var startDate
?如果是这样的话我怎样才能确保代码同步运行?
答案 0 :(得分:4)
当您致电setDate()
时,会更改日期。 Date原型上的所有setter函数都会改变日期实例。
您必须创建一个新的日期实例,然后再调用setter来更改它。
startDate = new Date(startDate);
startDate.setDate(startDate().getDate() + 1);
答案 1 :(得分:1)
它将为您完成工作,它不会改变您的日期,直到您推迟当前日期:
var startDate = new Date('2015-07-01 00:00');
var endDate = new Date('2015-07-10 00:00');
var arrayOfDates = [];
if (endDate >= startDate) {
for(var dt = startDate; startDate < endDate; dt = new Date(startDate.setDate(startDate.getDate() + 1))){
console.log(startDate);
arrayOfDates.push(startDate);
}
}