@SorryIHaveLapki

Как проверить массив дат на вхождение в периоды дат?

Есть необходимые даты:

let date = [{time: "2022-08-29", total: 3}, {time: "2022-10-29", total: 2}]

И есть переменная с периодами дат:

let period = [ '2022-08-17', '2022-09-17', '2022-10-17', '2022-11-17' ]

Надо проверить, есть ли эта дата в данных периодах:

'2022-08-17 - 2022-09-17' 
'2022-09-17 - 2022-10-17'
'2022-10-17 - 2022-11-17'

И если есть, вывести date.total, а если нет total: 0. Должно получиться что-то похожее на это:

[
  {date: '2022-08-17 - 2022-09-17', total: 3},
  {date: '2022-09-17 - 2022-10-17', point: 0},
  {date: '2022-10-17 - 2022-11-17', point: 2}
]
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
const toDate = (value) => value instanceof Date ? value : new Date(value);

const inDateRange = (from, to, value) =>
    toDate(from).getTime() <= toDate(value).getTime() &&
    toDate(to).getTime() > toDate(value).getTime();

const collected = {};
for (let index = 0; index < period.length - 1; index++) {
    const current = period[index];
    const next = period[index + 1];
    const key = `${current} - ${next}`;
    collected[key] ??= 0;

    for (const entry of date) {
        if (inDateRange(current, next, entry.time)) {
            collected[key] += entry.total;
        }
    }
}

const result = Object.entries(collected).map(([key, value]) => ({ date: key, point: value }));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы