You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将日期数组按周分组(周始于周一、终于周日)?

按周(周一至周日)分组日期数组的实现方案

核心思路

  1. 将数组中的字符串日期转换为可计算的Date对象,注意处理dd/mm/yyyy格式的月份偏移(JavaScript中月份从0开始计数)。
  2. 为每个日期生成周标识:以周一为一周起始,通过计算该日期与当年第一个周一的天数差,确定所属周数。
  3. 依据周标识对日期分组,最后将分组后的日期转回原字符串格式。

JavaScript实现代码

// 原始日期数组
const dateArray = ["11/5/2023", "12/5/2023", "13/5/2023", "14/5/2023", "15/5/2023", "16/5/2023", "17/5/2023", "18/5/2023", "19/5/2023", "20/5/2023", "21/5/2023", "22/5/2023", "23/5/2023", "24/5/2023", "25/5/2023", "26/5/2023", "27/5/2023", "28/5/2023", "29/5/2023", "30/5/2023", "31/5/2023", "1/6/2023", "2/6/2023", "3/6/2023", "4/6/2023", "5/6/2023", "6/6/2023", "7/6/2023", "8/6/2023", "9/6/2023", "10/6/2023", "11/6/2023", "12/6/2023", "13/6/2023", "14/6/2023", "15/6/2023", "16/6/2023", "17/6/2023", "18/6/2023", "19/6/2023", "20/6/2023", "21/6/2023", "22/6/2023", "23/6/2023", "24/6/2023", "25/6/2023", "26/6/2023", "27/6/2023", "28/6/2023", "29/6/2023", "30/6/2023", "1/7/2023", "2/7/2023", "3/7/2023", "4/7/2023"];

// 转换dd/mm/yyyy字符串为Date对象
function parseDate(dateStr) {
  const [day, month, year] = dateStr.split('/').map(Number);
  return new Date(year, month - 1, day);
}

// 计算日期所属周数(周一为一周起始)
function getWeekNumber(date) {
  const startOfYear = new Date(date.getFullYear(), 0, 1);
  // 定位当年第一个周一
  const firstMonday = startOfYear.getDay() === 1 
    ? startOfYear 
    : new Date(startOfYear.setDate(startOfYear.getDate() + (1 - startOfYear.getDay() + 7) % 7));
  // 计算当前日期与第一个周一的天数差
  const dayDiff = Math.floor((date - firstMonday) / (1000 * 60 * 60 * 24));
  // 周数从0开始计数,可根据需求调整为从1开始
  return Math.floor(dayDiff / 7);
}

// 按周分组日期数组
function groupDatesByWeek(dateArr) {
  const groups = {};
  dateArr.forEach(dateStr => {
    const date = parseDate(dateStr);
    const weekNum = getWeekNumber(date);
    if (!groups[weekNum]) {
      groups[weekNum] = [];
    }
    groups[weekNum].push(dateStr);
  });
  // 将分组结果转为有序数组
  return Object.values(groups);
}

// 执行分组并输出结果
const groupedDates = groupDatesByWeek(dateArray);
console.log(groupedDates);

代码说明

  • parseDate:处理dd/mm/yyyy格式的字符串,转换为JavaScript原生Date对象,修正月份索引偏移问题。
  • getWeekNumber:通过定位当年第一个周一,计算当前日期与该基准日的天数差,得到唯一的周标识,确保周一为一周起始。
  • groupDatesByWeek:以周数为键存储对应日期,最后将对象值转为数组,得到按周有序分组的结果。

内容的提问来源于stack exchange,提问作者ArUn GuPta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:13:11