js制作日历获取当月数据信息

<script>
    function generateCalendar(year, month) {
      const daysInMonth = getDaysInMonth(year, month); // 获取当月天数
      const firstDayOfMonth = new Date(year, month - 1, 1).getDay(); // 获取当月第一天是星期几
      const daysInPrevMonth = getDaysInMonth(year, month - 1); // 获取上月天数
      let calendarArr = []
      // 生成上月剩余号数
      let prevMonthDays = []; // 上月剩余天数
      if (firstDayOfMonth !== 1) {
        if (firstDayOfMonth === 0) {
          for (let i = 0; i < 6; i++) {
            prevMonthDays.push(daysInPrevMonth - i);
          }
        } else {
          for (let i = 0; i < firstDayOfMonth - 1; i++) {
            prevMonthDays.push(daysInPrevMonth - i);
          }
        }
      }
      prevMonthDays = prevMonthDays.reverse();
      // 生成当月号数
      let newMonthDays = [];
      for (let i = 1; i <= daysInMonth; i++) {
        newMonthDays.push(i);
      }
      // 生成下月号数
      let nextMonthDays = []; // 下月剩余天数
      for (let i = 1; i <= 42 - (prevMonthDays.length + newMonthDays.length); i++) {
        nextMonthDays.push(i);
      }
      // 将号数处理为对象
      let prevMonthObjDays = prevMonthDays.map(item => {
        let obj = {
          day: item,
          year: year,
          month: month - 1,
          date: year + '-' + (month - 1).toString().padStart(2, '0') + '-' + item.toString().padStart(2, '0')

        };
        return obj;
      });
      let newMonthObjDays = newMonthDays.map(item => {
        let obj = {
          day: item,
          year: year,
          month: month,
          date: year + '-' + month.toString().padStart(2, '0') + '-' + item.toString().padStart(2, '0')

        };
        return obj;
      });
      let nextMonthObjDays = nextMonthDays.map(item => {
        let obj = {
          day: item,
          year: year,
          month: month + 1,
          date: year + '-' + (month + 1).toString().padStart(2, '0') + '-' + item.toString().padStart(2, '0')
        };
        return obj;
      });
      let daysObjArr = [...prevMonthObjDays, ...newMonthObjDays, ...nextMonthObjDays];
      let arr = [];
      for (let i = 0; i <= daysObjArr.length; i++) {
        if (i === 0) {
          arr.push(daysObjArr[i]);
        } else if (i % 7 === 0) {
          calendarArr.push(arr);
          arr = [];
          arr.push(daysObjArr[i]);
        } else {
          arr.push(daysObjArr[i]);
        }
      }

      function getDaysInMonth(year, month) {
        return new Date(year, month, 0).getDate();
      }
      return calendarArr;
    }
    console.log(generateCalendar(2024, 9))
  </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值