let timesPerDay = []
const today = moment();
//not working
for (let i = 0; i <3; i++) {
timesPerDay.push(today.add(8 * i,"hour"));
}
//working normally
for (let i = 0; i <3; i++) {
console.log(today.add(8 * i,"hour"));
}
console.log(timesPerDay)
发生这种情况是因为您使用同一时刻的对象来推动
所以这应该有帮助
let timesPerDay = []
for (let i = 0; i <3; i++) {
timesPerDay.push(moment().add(8*i,"hour"));
}
for (let i = 0; i <3; i++) {
console.log(moment().add(8*i,"hour"));
}
console.log(timesPerDay)
,
逐步引导您完成代码:
let timesPerDay = [] // create an array
const today = moment(); // create a moment object
for (let i = 0; i <3; i++) {
// add hours to moment object
// push a reference to that moment object into your array
// it's always a reference to the SAME moment object,so the same object is referenced in your array multiple times
// mutations to that object will show everywhere it is referenced
timesPerDay.push(today.add(8 * i,"hour"));
}
for (let i = 0; i <3; i++) {
// add hours to same moment object
// log the string representation of that object AT EACH ITERATION
// once transformed to a string,the string representation will not change as it is no longer part of the object
console.log(today.add(8 * i,"hour"));
}
console.log(timesPerDay) // log string representation of your array,which is just 3 references to the same object
,
由于momentjs .add
正对today
变量进行更改,因此所有日期都将相同(等于开始日期+ 0 + 8 + 16小时),因为您在所有时间。
您必须克隆日期才能重新开始。
const today = moment()
console.log(`Today: ${today}`)
// Today: Wed Dec 18 2019 17:14:11 GMT+0100
// Loop 0: Wed Dec 18 2019 17:14:11 GMT+0100
// Loop 1: Thu Dec 19 2019 01:14:11 GMT+0100
// Loop 2: Thu Dec 19 2019 09:14:11 GMT+0100
const times = [0,1,2].map(offset => {
const date = moment(today) // clone
date.add(8*offset,"hour")
console.log(`Loop ${offset}: ${date}`)
return date
})
编辑:不是+ 8 + 16 + 24而是0 + 8 + 16
编辑2:证明console.log的第二次迭代没有输出OP想要的内容:
let timesPerDay = []
const today = moment();
console.log(`today: ${today}`)
// today: Wed Dec 18 2019 17:03:02 GMT+0100
// Loop 0: Wed Dec 18 2019 17:03:02 GMT+0100
// Loop 1: Thu Dec 19 2019 01:03:02 GMT+0100
// Loop 2: Thu Dec 19 2019 17:03:02 GMT+0100
// Last loop is 24 hours later than the initial date!
for (let i = 0; i <3; i++) {
// Mutates your start date
const newDate = today.add(8*i,"hour");
timesPerDay.push(newDate);
console.log(`Loop ${i}: ${newDate}`);
}
console.log(timesPerDay)