SOURCE

// 其实时间和结束时间,获取期间各周首位
class getDateWeekList {
    constructor(start, end) {
        this.start = start
        this.end = end
    }
    // 获取时间格式
    getDateText(dd) {
        const nDate = new Date(dd)
        const y = nDate.getFullYear();
        const m = nDate.getMonth() + 1; //获取月份
        const d = nDate.getDate();
        return y + "-" + m + "-" + d;
    }
    // 获取任意日期的 周一 或者 周日
    getMondayOrSunday(date, state) {
        const dd = new Date(date)
        const week = dd.getDay(); //获取时间的星期数
        let minus = 0
        if (state === 'start') {
            minus = week ? week - 1 : 6;
        } else {
            minus = week ? week - 7 : 0;
        }
        // 补时间差值
        return this.getDateText(dd.setDate(dd.getDate() - minus))
    }
    // 补开始时间和结束时间
    fillDate(start, end) {
        return {
            start: this.getMondayOrSunday(start, 'start'),
            end: this.getMondayOrSunday(end, 'end')
        }
    }
    getWeekList() {
        let weekList = []
        let dates = this.fillDate(this.start, this.end)
        let start = new Date(dates.start)
        let end = new Date(dates.end)
        while (start < end) {
            let weekText = ''
            const initStart = this.getDateText(start)
            const s = start.setDate(start.getDate() + 7)
            weekText = initStart + '~' + this.getDateText(new Date(s).setDate(new Date(s).getDate() - 1))
            weekList.push({
                monday: new Date(initStart).valueOf(), // 周一
                sunday: new Date(s).setDate(new Date(s).getDate() - 1), // 周日
                weekText: weekText
            })
        }
        return weekList
    }
}


/* ----------  开始执行  ---------- */

// const endTime = new Date().valueOf()
const endTime = 1685462399000

// 获取当周周一
const monday = getMonDay(endTime)

// 获取开始时间
const startTime = monday - (86400000 * 21)

// 获取各周首尾时间
const weekList = getWeekList(startTime, endTime)

console.log(startTime, endTime)
console.log(JSON.stringify(weekList))



/* ----------  其他方法  ---------- */

// 获取任意时间当周的周一凌晨时间戳
function getMonDay(endTime) {
    const time = new Date(endTime)
    const timeNum = new Date(endTime).valueOf()

    const day = time.getDay() > 0 ? time.getDay() : 7 // 表示当前是周几
    const oneDayTime = 24 * 60 * 60 * 1000 // 一天的总ms

    // 选择时间当周的周一时间戳
    const MondayTime = timeNum - (day - 1) * oneDayTime

    return new Date(new Date(MondayTime).setHours(0, 0, 0, 0)).valueOf()
}

// 调用class
function getWeekList(start, end) {
    const weekList = new getDateWeekList(start, end)
    return weekList.getWeekList()
}

console 命令行工具 X clear

                    
>
console