как подобрать диапазон дат и времени для каждого понедельника в указанном c диапазоне дат - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь получить диапазон дат и времени для каждого понедельника в конкретный c период, и я могу сделать это с этого месяца до конца года, но я складываюсь для динамической установки периода.

This is my code 

enum DAYS {
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
}

function getDays(day) {
    const d = new Date(new Date().setHours(0, 0, 0, 0)),
        month = d.getMonth(),
        days = [];
    d.setDate(day);
    while (d.getDay() !== day) {
        console.log('d')
        d.setDate(d.getDate() + 1);
    }

    while (d.getMonth()) {
        const date = new Date(d.getTime())
        const start = date.getTime()
        const end = start + 24 * 60 * 60
        const range = {
            date,
            start,
            end
        }
        days.push(range);
        d.setDate(d.getDate() + 7);
    }

    return days;
}

const Mondays = getDays(DAYS.MON)
const Tuesdays = getDays(DAYS.TUE)
console.log(Mondays)
console.log(Tuesdays)

например, если я хочу иметь весь понедельник с 14.06.2019 по 13.06.2020, как я могу установить период как дату начала и дату окончания? Не могли бы вы мне посоветовать?

1 Ответ

0 голосов
/ 22 июня 2020
    enum DAYS {
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
}

function getDays(day, startDate, endDate) {
    const d = new Date(startDate)
    const days = [];
    d.setDate(day);
    while (d.getDay() !== day) {
        d.setDate(d.getDate() + 1);
    }
    while (d < endDate) {
        if (d >= startDate) {
            const date = new Date(d.getTime())
            const start = date.getTime()
            const end = start + 24 * 60 * 60
            const range = {
                date,
                start,
                end
            }
            days.push(range);
        }
        d.setDate(d.getDate() + 7);
    }

    return days;
}

const startDate = new Date('Thu Jan 20 2020 00:00:00 GMT+0900 (Japan Standard Time)')
const endDate = new Date('Thu Jun 19 2022 00:00:00 GMT+0900 (Japan Standard Time)')
const day = DAYS.MON
const Mondays = getDays(day, startDate, endDate)
...