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

如何在JavaScript中筛选指定日期范围内的对象数组数据

JavaScript 日期范围筛选实现方案

原代码存在的问题

  • 未统一转换日期格式:直接对不同结构的日期字符串做大小对比会按字符编码逐位比较,无法得到正确的日期大小关系
  • 筛选逻辑错误:原判断e.cdate < sdate && e.cdate > edate逻辑冲突,不存在同时小于起始日期又大于结束日期的值
  • 方法使用错误:Array.filter本身就会返回符合条件的新数组,不需要手动声明空数组push元素,且原函数没有返回最终结果
  • 日期解析错误:给定的sdate、edate为日-月-年格式,直接传入Date构造函数会被错误解析,需要先调整为标准可识别格式。

正确实现代码

// 统一转换日期为时间戳,方便比较
function parseDate(dateStr, isDmyFormat = false) {
  if (isDmyFormat) {
    // 处理日-月-年格式的日期
    const [day, month, year] = dateStr.split('-');
    return new Date(`${year}-${month}-${day}`).getTime();
  }
  return new Date(dateStr).getTime();
}

function getDateRangeData(obj, sdate, edate) {
  const startTime = parseDate(sdate, true);
  const endTime = parseDate(edate, true);
  // 筛选cdate落在[startTime, endTime]区间的元素
  return obj.orders.filter(item => {
    const currentTime = parseDate(item.cdate);
    return currentTime >= startTime && currentTime <= endTime;
  });
}

// 测试用例
const obj = {
  orders:[
      {id:1, mode: "xyz", orderid: 123, cdate: "2017-2-13 07:33:30"},
      {id:2, mode: "abc", orderid: 456, cdate: "2018-4-20 06:10:30"},
      {id:3, mode: "xyz", orderid: 768, cdate: "2020-8-10 08:00:00"}
  ]
};
const sdate = "11-5-2020";
const edate = "20-2-2021";

// 调用方法得到结果
const result = getDateRangeData(obj, sdate, edate);
console.log(result);

输出结果

[ { id: 3, mode: 'xyz', orderid: 768, cdate: '2020-8-10 08:00:00' } ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:21:00