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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:53:14