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

如何用JavaScript按历史日期区间筛选带UNIX时间戳的对象

实现方案说明

你存储的created字段为秒级UNIX时间戳,而JS内置Date对象使用的是毫秒级时间戳,计算时仅需要做一次单位适配即可,不需要额外依赖createdDat字段。普通for循环完全可以实现过滤需求,也可以使用JS数组内置的filter方法获得更简洁的写法。

推荐方案:提前计算起止时间戳做数值对比(性能最优)

提前把目标日期转换为当天0点、次日0点的秒级时间戳,遍历的时候直接做数值比较即可,不需要对每个数组元素做日期转换,数据量大的时候性能优势明显:

// 示例数据
const data = [
  {created: 1601820360, magic: -0.1, power: 0.1, createdDat: "2020-10-05"},
  {created: 1601820365, magic: -0.8, power: 0.8, createdDat: "2020-10-05"},
  // 更多数据...
]

// 1. 定义你要筛选的目标日期
const targetDate = new Date('2020-10-05');
// 2. 计算目标日期当天0点的秒级时间戳
const startUnix = targetDate.getTime() / 1000;
// 3. 计算目标日期次日0点的秒级时间戳
const endUnix = startUnix + 24 * 60 * 60;

// 写法1:使用Array.filter(最简洁)
const filteredResult = data.filter(item => item.created >= startUnix && item.created < endUnix);

// 写法2:使用普通for循环(兼容旧环境,性能和filter一致)
const filteredResult = [];
for (let i = 0; i < data.length; i++) {
  const current = data[i];
  if (current.created >= startUnix && current.created < endUnix) {
    filteredResult.push(current);
  }
}

可选方案:遍历转日期字符串对比(适合灵活维度过滤)

如果需要按周、按月等灵活维度过滤,可以在遍历时把时间戳转为对应格式的字符串直接对比:

const targetDateStr = '2020-10-05';
const filteredResult = data.filter(item => {
  const itemDate = new Date(item.created * 1000);
  // 转为YYYY-MM-DD格式字符串和目标值对比
  return itemDate.toISOString().split('T')[0] === targetDateStr;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:15:04