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

Angular 2如何在两个日期之间过滤数据记录?

解决日期范围过滤成员的问题

嘿,我注意到你想根据日期范围过滤members数组里的成员,但直接用字符串比较日期会踩坑哦!你的日期格式是DD-MM-YYYY,字符串比较是按字符顺序来的,这会导致逻辑错误——比如"01-12-2017"(12月1日)字符串上会比"07-08-2017"(8月7日)小,但实际日期是前者更晚,这样过滤结果就不对了。

正确的做法是先把字符串格式的日期转换成Date对象,再进行比较。下面是具体的实现方案:

1. 先定义你的members数组

const members = [
  { "id":1, "name":"Jack", "date":"01-06-2017" },
  { "id":2, "name":"Allen", "date":"07-08-2017" },
  { "id":3, "name":"Annie", "date":"22-11-2017" }
];

2. 写一个日期转换辅助函数

因为你的日期是DD-MM-YYYY格式,需要拆分后转换成Date对象(注意Date构造函数的月份是0-based,即1月对应0,所以要减1):

function convertToDate(dateStr) {
  const [day, month, year] = dateStr.split('-');
  return new Date(year, month - 1, day);
}

3. 设置日期范围并过滤成员

假设你要筛选2017年7月1日到2017年10月31日之间的成员,代码如下:

// 转换开始和结束日期为Date对象
const startDate = convertToDate("01-07-2017");
const endDate = convertToDate("31-10-2017");

// 过滤符合条件的成员
const selectedMembers = members.filter(member => {
  const memberDate = convertToDate(member.date);
  // 根据需求调整比较符:这里用>=和<=包含边界日期,你也可以换成>和<排除边界
  return memberDate >= startDate && memberDate <= endDate;
});

console.log(selectedMembers); 
// 输出结果:[{ "id":2, "name":"Allen", "date":"07-08-2017" }]

额外说明

  • 如果你的startDate和endDate本身已经是Date对象,就不需要用convertToDate转换它们了,直接使用即可。
  • 如果你的日期包含时间部分,记得统一时间基准(比如都设置为00:00:00),避免时间差异影响比较结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:19:23