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

如何使用Moment.js将含日期属性的对象数组按本周/上周分组?

将对象数组按本周/上周记录分组(JavaScript + Moment.js)

刚好我之前处理过类似的需求,用Moment.js来做这个分组非常顺手,我来给你一步步拆解实现方式:

首先先确认你的数据集:

const obj = [{ first_name: "Peter", last_name: "Hansen", date: "2018-01-01" }, { first_name: "Jonas", last_name:"Da Vinci", date: "2018-01-02" }, { first_name: "Ohmel", last_name: "Reynolds", date: "2018-01-03" }, { first_name: "Raisa", last_name: "Johnson", date: "2017-12-25" }, { first_name: "Karen", last_name: "Anderson", date: "2017-12-26" }, { first_name: "Kristina", last_name: "Alvaro", date: "2017-12-27" }];

核心实现代码

我们可以利用Moment.js的isSameWeek方法来快速判断日期所属的周,再遍历数组完成分组:

// 初始化分组容器
const groupedRecords = {
  thisWeek: [],
  lastWeek: []
};

// 获取当前日期的moment实例
const currentDate = moment();

obj.forEach(record => {
  // 将记录中的日期转为moment对象
  const recordDate = moment(record.date);

  // 判断是否属于本周
  if (recordDate.isSameWeek(currentDate)) {
    groupedRecords.thisWeek.push(`${record.first_name} ${record.last_name}`);
  }
  // 判断是否属于上周
  else if (recordDate.isSameWeek(currentDate.clone().subtract(1, 'week'))) {
    groupedRecords.lastWeek.push(`${record.first_name} ${record.last_name}`);
  }
  // 可选:处理既不在本周也不在上周的记录
  // else {
  //   groupedRecords.otherWeeks.push(`${record.first_name} ${record.last_name}`);
  // }
});

// 输出分组结果
console.log('This Week');
groupedRecords.thisWeek.forEach(name => console.log(name));
console.log('\nLast Week');
groupedRecords.lastWeek.forEach(name => console.log(name));

关键细节说明

  1. 周起始日的调整:Moment.js默认以周日作为一周的第一天,如果你的业务场景需要以周一为起始,可以给isSameWeek方法传入第二个参数'isoWeek',比如:
    recordDate.isSameWeek(currentDate, 'isoWeek')
    
  2. 日期克隆的重要性:使用currentDate.clone().subtract(1, 'week')而不是直接currentDate.subtract(1, 'week'),是为了避免修改原有的currentDate实例,防止后续判断出错。
  3. 扩展处理:如果有超出两周范围的记录,可以添加额外的分组来存放,代码里已经留了注释示例。

预期输出

运行上述代码后,你会得到符合需求的输出:

This Week
Peter Hansen
Jonas Da Vinci
Ohmel Reynolds

Last Week
Raisa Johnson
Karen Anderson
Kristina Alvaro

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:44