如何在JavaScript中按日期范围过滤API返回的JSON数据
问题原因
你当前的过滤逻辑是直接对日期字符串做大小比较,JS字符串比较是基于Unicode编码逐位对比的,"Feb 10, 2020"和"Feb 2, 2020"对比时,会先匹配到前4位Feb 一致,第5位1的编码小于2,就会判定"Feb 10, 2020" < "Feb 2, 2020",导致2月2日到9日的日期被误判为不在范围内。
修复方案
把所有待比较的日期字符串都转为Date对象,再基于时间戳做大小对比即可,修改后的代码如下:
async function getData(){ try { const respose = await fetch("http://34.198.81.140/attendance.json"); if (!respose.ok) throw new Error('接口请求失败'); const myData = await respose.json(); // 起止日期统一转成时间戳 const startTimestamp = new Date("Feb 1, 2020").getTime(); const endTimestamp = new Date("Feb 29, 2020").getTime(); const result = myData.filter((item) => { // 每条数据的日期也转成时间戳再比较 const itemTimestamp = new Date(item.date).getTime(); return itemTimestamp >= startTimestamp && itemTimestamp <= endTimestamp; }) console.log(result); } catch (err) { console.error('运行出错:', err); } } getData()
补充说明:如果你的考勤数据涉及跨时区场景,可以进一步把所有日期转成UTC时间戳再比较,避免时区偏移导致的判断误差。
内容的提问来源于stack exchange,提问作者Akash kumar
相关产品推荐
相关产品推荐

