JS 根据年生成周数据

58 min read
function formatDig(num) {
    return num > 9 ? "" + num : "0" + num;
}

function formatDate(mill) {
    const y = new Date(mill);
    let raws = [formatDig(y.getMonth() + 1), formatDig(y.getDate()), ""];
    let format = ["月", "日"];
    // return String.raw({ raw: raws }, ...format);
    return formatDig(y.getMonth() + 1) + formatDig(y.getDate())
}

function *createWeeks(year) {
    const oneDayTime = 24 * 3600 * 1000;
    let start = new Date(year, 0, 1);
    let end = new Date(year, 11, 31);
    let firstDay = start.getDay() || 7;
    let lastDay = end.getDay() || 7;
    let startTime = +start;
    let endTime = startTime + (7 - firstDay) * oneDayTime;
    let _endTime = end - (7 - lastDay) * oneDayTime;
    yield [startTime, endTime];
    startTime = endTime + oneDayTime;
    endTime = endTime + 7 * oneDayTime;
    while (endTime < _endTime) {
        yield [startTime, endTime];
        startTime = endTime + oneDayTime;
        endTime = endTime + 7 * oneDayTime;
    }
    yield [startTime, +end];
}

export function getWeekList() {
    const year = [2021, 2022, 2023, 2024, 2025, 2026,2027,2028];
    let arr = [];
    for (let j = 0; j < year.length; j++) {
        console.log(year[j]);
        let obj = {
            text: year[j] + "年",
            value: year[j],
            children: [],
        };
        let index = 1;
        for (let i of createWeeks(year[j])) {
            let start = i[0];
            let end = i[1];
            let obj1 = {
                text: `第${formatDig(index++)}${formatDate(start)}-${formatDate(
                    end
                )}`,
                value: year[j]+formatDate(start) + "-" + year[j] + formatDate(end)
            };
            // console.log(
            //     `第${formatDig(index++)}周 ${formatDate(start)}-${formatDate(end)}`
            // );
            obj.children.push(obj1);
        }
        arr.push(obj);
    }
    return arr;
}