输入年份,输出该年的年-季-月-周的JSON代码

//计算日期是该年的第几周

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五分钱嘀Love

一起学习,一起努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值