JavaScript中JSON时间与本地时间对比过滤结果异常求助
AQI数据时间筛选异常排查
数据格式
我处理的AQI数据格式如下:
[ { "hourly_AQI": 73.0, "hourly_date": "Tue, 31 Oct 2023 11:00:00 GMT" }, { "hourly_AQI": 79.0, "hourly_date": "Tue, 31 Oct 2023 13:00:00 GMT" }, { "hourly_AQI": 77.0, "hourly_date": "Tue, 31 Oct 2023 14:00:00 GMT" } ]
筛选代码
我写了一段JavaScript代码,想要筛选出hourly_date大于等于本地当前时间的数据:
const now = new Date(); const filteredData = aqiData?.filter((item) => { const date = new Date(item.hourly_date); // 检查数据时间是否在未来 return date >= now }); console.log(filteredData)
异常现象
运行结果不符合预期:
- 本地时间为18:03时,代码返回了13:00:00及以后的数据
- 本地时间为13:00左右时,返回了07:00:00及以后的数据
问题原因
核心问题是时区转换的理解偏差:
new Date()生成的是本地时区的当前时间new Date(item.hourly_date)会把GMT格式的时间字符串,转换为对应本地时区的时间(比如GMT 13:00在东八区会被转成21:00本地时间)
如果你的预期是把hourly_date当成本地时间筛选,但实际数据是GMT时区,就会导致转换后的时间和预期完全不符,最终筛选结果出错。
解决方案
根据你的实际需求选择以下方案:
方案1:确认hourly_date是GMT时区,筛选GMT未来时间
直接用时间戳比较(时间戳是UTC统一的,不受时区影响),逻辑更可靠:
const filteredData = aqiData?.filter(item => new Date(item.hourly_date).getTime() >= Date.now()); console.log(filteredData);
方案2:误将GMT标记当成本地时间,按本地时间解析
如果hourly_date的实际含义是本地时间(只是字符串带了GMT标记),可以去掉GMT后按本地时间解析:
const now = new Date(); const filteredData = aqiData?.filter((item) => { const localDateStr = item.hourly_date.replace(' GMT', ''); const date = new Date(localDateStr); return date >= now; }); console.log(filteredData);
验证方法
打印转换后的时间,确认是否符合预期:
const now = new Date(); console.log('当前本地时间:', now.toString()); aqiData?.forEach(item => { const date = new Date(item.hourly_date); console.log(`原始GMT时间: ${item.hourly_date} → 本地时间: ${date.toString()}`); });
内容的提问来源于stack exchange,提问作者Belle Flynn
相关产品推荐
相关产品推荐

