Javacript Get Days между двумя датами - PullRequest
3 голосов
/ 08 марта 2020

У меня есть две даты Sun Mar 08 2020 05:30:00 GMT+0530 (India Standard Time) Sat Mar 14 2020 05:30:00 GMT+0530 (India Standard Time), когда я oop, эти две даты с условием, я хочу получить 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 голос
/ 08 марта 2020

Это потому, что setHours() изменяет объект даты, поэтому, устанавливая часы как минимум до полуночи, условие l oop останавливает одну итерацию ранее; сначала вам нужно будет сделать копию:

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))));
...