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

如何从API返回的JSON中提取离当前时间最近的未来start_time对应的ID

解决方法

核心逻辑很简单:先过滤掉所有时间早于当前时间的条目,再从剩下的未来时间条目中找和当前时间差值最小的即可。

原生JavaScript实现

你之前的代码问题有两个:

  • 没有先过滤过去的条目,过去时间和当前时间的差值为负数,排序时会排在最前面,导致拿到过期数据
  • 代码中写的shift_start_time和实际JSON结构里的start_time字段不匹配,属于拼写错误

修正后的代码:

const currentTs = Date.now();
// 先预处理所有条目,计算和当前时间的差值
const validItems = response.map(item => {
    const startTimeTs = new Date(item.expected.start_time).getTime();
    return {
        ...item,
        diff: startTimeTs - currentTs
    };
// 只保留未来时间的条目,如果需要包含当前时间可把>0改成>=0
}).filter(item => item.diff > 0);

let targetId = null;
if (validItems.length) {
    // 找差值最小的条目,也就是离当前时间最近的未来条目
    const nearestItem = validItems.reduce((prev, curr) => prev.diff < curr.diff ? prev : curr);
    targetId = nearestItem.expected.id;
}

console.log(targetId ?? '无符合要求的未来条目');

Moment.js实现

你之前的Moment写法问题是只打印了差值,没有收集符合要求的条目做对比,而且漏了expected层级取不到start_time,修正后的代码:

const currentTime = moment();
let minDiff = Infinity;
let targetId = null;

for (let i = 0; i < response.length; i++) {
    const item = response[i].expected;
    const startTime = moment(item.start_time);
    // 直接用Moment自带的isAfter判断是否为未来时间,不易出错
    if (startTime.isAfter(currentTime)) {
        const diff = startTime.diff(currentTime);
        if (diff < minDiff) {
            minDiff = diff;
            targetId = item.id;
        }
    }
}

console.log(targetId ?? '无符合要求的未来条目');

内容的提问来源于stack exchange,提问作者pratteek shaurya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:04