js实现根据年和月,生成所在月的周日期数组

function formatTime(date) {
  const dt = new Date(date);
  const y = dt.getFullYear();
  const m = (dt.getMonth() + 1 + "").padStart(2, "0");
  const d = (dt.getDate() + "").padStart(2, "0");
  return `${y}-${m}-${d}`;
}

function getMonthWeeks(year, month) {
  const firstDayOfMonth = new Date(year, month - 1, 1);
  const lastDayOfMonth = new Date(year, month, 0);
  const weeks = [];
  const currentDay = new Date(firstDayOfMonth);
  let weekNumber = 0;
  const weekNumberCn = ["一", "二", "三", "四", "五", "六"]; // 最多六周
  let isEnd = true;
  while (isEnd) {
    const startOfWeek = new Date(currentDay);
    const endOfWeek = new Date(currentDay);
    // 获取本周的开始日期(周一)
    startOfWeek.setDate(
      currentDay.getDate() -
        currentDay.getDay() +
        (currentDay.getDay() === 0 ? -6 : 1)
    );
    // 获取本周的结束日期(周日)
    endOfWeek.setDate(
      currentDay.getDate() -
        currentDay.getDay() +
        (currentDay.getDay() === 0 ? 0 : 7)
    );
    weeks.push({
      weekNumber: "第" + weekNumberCn[weekNumber] + "周",
      start: formatTime(startOfWeek),
      end: formatTime(endOfWeek),
    });
    weekNumber++;
    if (endOfWeek < lastDayOfMonth) {
      currentDay.setDate(currentDay.getDate() + 7);
    } else {
      isEnd = false;
    }
  }

  return weeks;
}

// 示例:获取2023年10月的周日期数组
const year = 2023;
const month = 10;
const monthWeeks = getMonthWeeks(year, month);
console.log(monthWeeks);
// [ { weekNumber: '第一周', start: '2023-09-25', end: '2023-10-01' },
//   { weekNumber: '第二周', start: '2023-10-02', end: '2023-10-08' },
//   { weekNumber: '第三周', start: '2023-10-09', end: '2023-10-15' },
//   { weekNumber: '第四周', start: '2023-10-16', end: '2023-10-22' },
//   { weekNumber: '第五周', start: '2023-10-23', end: '2023-10-29' },
//   { weekNumber: '第六周', start: '2023-10-30', end: '2023-11-05' } ]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值