需求
1、每年的第一个周一到周日算作一周,以此类推
2、第一个周一之前的一周大于等于4天算作当前年的第一周,否则算做去年的最后一周,第一个周一到周日将会作为第二周开始计数,并且当前年无第一周
3、每年的最后一整周后的一周如果大于等于4天算做第最后一周,否则不算周
实现
let weeks = [];
for (let i = 1970; i <= 2060; i++) {
let year = i;
let date = new Date(`${
year}-1-1`);
let obj = {
label: year,
children: [],
}
// 当前年第一个周一日期的时间戳
let time;
if (date.getDay() === 1) {
time = new Date(`${
year}-1-${
date.getDay()} 00:00:00`).getTime();
} else if (date.getDay() > 4) {
time = new Date(`${
year}-1-${
9 - date.getDay()} 00:00:00`).getTime();
} else if (date.getDay() <= 4) {
time = new Date(`${
year}-1-${
9 - date.getDay()} 00:00:00`).getTime() - 7 * 24 * 3600000;
}
let count = 0;
for (let j = 1; j <= 53; j++) {
let startTime = time + (j - 1) * 7 * 24 * 3600000;
let start = new Date(startTime);
let endTime = startTime + 6 * 24 * 3600000;
let end = new Date(endTime);
if (j === 1) {
if (
(startTime - new Date(`${
year}-1-1 00:00:00`).getTime() <= 3 * 24 * 3600000)
&&
(startTime - new Date(`${
year}-1-1 00:00:00`).getTime() > 0)
) {
count = 1;
} else {
count = 0;
}
}
if (j === 52 || j === 53) {
if (new Date(`${
year}-12-31 00:00:00`).getTime() - startTime < 4 * 24 * 3600000) {
break;
}
}
obj.children.push({
label: `week${
count + j}`,
start: `${
start.getFullYear()}/${
start.getMonth() + 1}/${
start.getDate()}`,
end: `${
end.getFullYear()}/${
end.getMonth() + 1}/${
end.getDate()}`
})
}
weeks.push(obj)
}
console.log(weeks);