//计算日期是该年的第几周
function getISOWeek(date) {
const firstDayOfYear = new Date(date.getFullYear(), 0, 1);
const daysOffset = (firstDayOfYear.getDay() + 6) % 7;
const firstMondayOfYear = new Date(
firstDayOfYear.getFullYear(),
0,
1 + ((8 - firstDayOfYear.getDay()) % 7)
);
const diffInDays = (date - firstMondayOfYear) / (1000 * 60 * 60 * 24);
const weekNumber = Math.floor((daysOffset + diffInDays) / 7) + 1;
return weekNumber;
}
//循环输出结果
function generateDateData(year) {
const dateData = {
value: year,
label: `${year}年`,
children: [],
};
for (let quarter = 1; quarter <= 4; quarter++) {
const quarterData = {
value: quarter,
label: `第${quarter}季`,
children: [],
};
let startMonth = (quarter - 1) * 3 + 1;
let endMonth = startMonth + 2;
if (endMonth > 12) {
endMonth = 12;
}
for (let month = startMonth; month <= endMonth; month++) {
const monthData = {
value: month,
label: `第${month}月`,
children: [],
};
for (
let week = getISOWeek(new Date(year, month - 1, 1));
week <= getISOWeek(new Date(year, month - 1, 30));
week++
) {
const weekData = {
value: week,
label: `第${week}周`,
};
monthData.children.push(weekData);
}
quarterData.children.push(monthData);
}
dateData.children.push(quarterData);
}
return dateData;
}
//年份
const currentYear = new Date().getFullYear();
const dateData = generateDateData(currentYear);
console.log(dateData);
//引入fs
const fs = require("fs");
//创建文件,写入数据,同步
fs.writeFileSync("./date.json", JSON.stringify(dateData));