JavaScript获取两个日期之间的天数

4

我有两个日期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;
  };
1个回答

1

这是因为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))));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接