前端基础(三十):自定义周度计算

需求

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);

猜你喜欢

转载自blog.csdn.net/weixin_43526371/article/details/123691503