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
相关产品推荐
相关产品推荐

