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

TypeScript筛选近3天新增产品代码无结果如何解决?

代码失效原因排查

你写的代码有3个核心问题,直接导致筛选结果不符合预期:

  • 字段名不匹配:需求明确说明产品存储添加时间的属性是addedDate,你的筛选逻辑里写的是p.dateAdded,读取不存在的属性会得到undefined,传入new Date()会生成无效日期对象,根本拿不到正确的添加时间。
  • 时间比较逻辑完全错误:getDate()返回的是日期在当月的“日”数值(取值1-31),直接拿这个值加3和当前日期的“日”值比较,完全没考虑跨月、跨年的场景:比如当月2号,3天前是上月30号,上月30号的getDate()返回30,30+3远大于2,会被误判为符合条件;如果是当月31号,3天前是28号,27号的getDate()+3=30 < 31,会被误排除。
  • 丢失时间维度信息:只用“日”字段做比较,完全忽略了年、月、时、分、秒的差异,根本算不准真实的时间差。
正确实现代码

时间比较的通用可靠方案是统一转成毫秒级时间戳做差值计算,自动规避跨月、跨年、闰年的问题:

const now = new Date();
// 计算3天前的时间阈值:1天的毫秒数为24*60*60*1000
const threshold = now.getTime() - 3 * 24 * 60 * 60 * 1000;

const newProducts: IProduct[] = this.products.filter(product => {
  const addedTimestamp = new Date(product.addedDate).getTime();
  // 额外过滤掉日期格式非法的脏数据,避免NaN导致判断异常
  return !isNaN(addedTimestamp) && addedTimestamp >= threshold;
});

console.log(newProducts);

补充说明:如果业务要求“最近3天”按自然日计算(即不考虑时分秒,只要日期在近3天就算),可以先把当前时间、产品添加时间的时、分、秒、毫秒字段全部置0后再计算阈值,避免出现“今天下午3点时,3天前上午10点的产品因为时间差刚好满72小时被排除”的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:30:54