我有两个约会 Sun Mar 08 2020 05:30:00 GMT+0530 (India Standard Time) Sat Mar 14 2020 05:30:00 GMT+0530 (India Standard Time)
当我用条件循环这两个日期时,我想获得这两天之间的 7 天。但它只返回到星期五。
下面我添加了我的代码片段有人帮助我出了什么问题。
getDaysArray = (start, end) => {
console.log(start,end)
for (var arr = [], dt = start; dt <= end; dt.setDate(dt.getDate() + 1)) {
console.log(dt);
arr.push(new Date(dt.setHours(23, 59, 59, 0)));
}
console.log("array=>"+arr)
return arr;
};
最佳答案
因为 setHours()
修改日期对象,因此通过将小时设置为午夜之前,循环条件会提前停止一次迭代;你需要先复制一份:
getDaysArray = (start, end) => {
for (var arr = [], dt = start; dt <= end; dt.setDate(dt.getDate() + 1)) {
let newDate = new Date(dt);
arr.push(new Date(newDate.setHours(23, 59, 59, 0)));
}
return arr;
};
console.log(getDaysArray(new Date('Sun Mar 08 2020 05:30:00 GMT+0530 (India Standard Time)'), new Date('Sat Mar 14 2020 05:30:00 GMT+0530 (India Standard Time)')));
如果您打算使用生成器,则必须做同样的事情:
function* getDates(start, end) {
for (let dt = start; dt <= end; dt.setDate(dt.getDate() + 1)) {
yield new Date(dt)
}
}
startDate = new Date('Sun Mar 08 2020 05:30:00 GMT+0530 (India Standard Time)');
endDate = new Date('Sat Mar 14 2020 05:30:00 GMT+0530 (India Standard Time)');
console.log(Array.from(getDates(startDate, endDate), dt => new Date(dt.setHours(23, 59, 59, 0))));
关于JavaScript 获取两个日期之间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588684/