JavaScript基于时间范围过滤JSON 筛选1-2周区间内的记录
问题原因
- 拆分
delivery_time_frame的分隔符错误:原字段用空格-空格分隔起止日期,用'-'拆分只会把日期本身的年/月/日拆碎,无法获取完整的起止日期字符串 dateConverter传参错误:两次都传入了拆分后的第一个值,计算得到的时间差永远为0- 缺少时间区间判断逻辑:未对计算得到的天数做7-14天的范围校验
修正代码
二次过滤逻辑调整
const next_level = above_10.filter((d) => { // 用正确的分隔符拆分起止日期,同时去除两端空格避免格式异常 const [startStr, endStr] = d.delivery_time_frame.split(' - ').map(item => item.trim()) const diffDays = dateConverter(startStr, endStr) // 1周=7天,2周=14天,可根据实际需求调整为开/闭区间 return diffDays >= 7 && diffDays <= 14 })
可选优化:dateConverter函数容错补充
如果担心传入非法日期格式,可以新增有效性判断:
const dateConverter = (startDate, timeEnd) => { const newStartDate = new Date(startDate); const newEndDate = new Date(timeEnd); // 新增非法日期校验,避免计算异常 if (isNaN(newStartDate.getTime()) || isNaN(newEndDate.getTime())) return 0 const one_day = 1000*60*60*24; let result; result = Math.ceil((newEndDate.getTime() - newStartDate.getTime()) / (one_day)); console.log('date Converter result', result); if (result < 0) { return 0; } return result; }
示例数据测试说明
你提供的3条测试数据中:
- 第一条配送区间为2021-10-25到2021-11-14,间隔20天超出2周范围
- 第二条配送区间为2021-10-18到2021-10-24,间隔6天不足1周
- 第三条
delivery_time_frame长度不足10,第一步就被过滤
所以示例数据筛选后结果为空,可替换为符合7-14天区间的测试数据验证逻辑正确性。
内容的提问来源于stack exchange,提问作者s life
相关产品推荐
相关产品推荐

