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

Node.js定时任务异常:非指定EST时段仍执行API请求问题排查

Node.js定时任务时段判断错误排查与修复

问题概述

Node.js服务器运行定时任务,计划在EST时间凌晨4点至9点半(盘前交易时段)每25秒从API拉取数据,但当前非指定时段仍会触发API查询,且错误打印“Time between specified ranges”。

核心错误点

1. 时间检查函数未定义now变量

checkTime函数中直接使用了now.toLocaleString(),但未提前定义now变量。这会导致estNow成为无效的Date对象,进而让estHour/estMinute获取到错误值(比如NaN),最终导致条件判断逻辑混乱,错误返回true。

2. 时段判断逻辑冗余且存在逻辑偏差

原条件(estHour >= 4 && estHour <= 9) || estHour === 9 && estMinute <= 30存在两个问题:

  • estHour <=9已经包含了9点整到9点59分的所有时间,后续的|| estHour ===9 && estMinute <=30完全冗余;
  • 正确的时段应该是4点到9点(不含9点),或者9点整到9点30分,原条件会错误包含9点30分之后的时间。

3. 假日判断变量赋值语法错误

main函数中var isMarketHoliday();是错误语法:这是尝试调用函数但未将结果赋值给变量,导致isMarketHoliday始终为undefined,!isMarketHoliday会被解析为true,完全失去假日判断的作用。

修复后的代码

修正后的checkTime函数

function checkTime() {
    const now = new Date(); // 补充定义当前时间变量
    const estNow = new Date(now.toLocaleString("en-US", {timeZone: "America/New_York"}));
    const estHour = estNow.getHours();
    const estMinute = estNow.getMinutes();

    // 正确的时段判断逻辑
    if ((estHour >= 4 && estHour < 9) || (estHour === 9 && estMinute <= 30)) {
        console.log('Time between specified ranges');
        return true;
    } 
    console.log('Not between 4 am and 9:30 am EST');
    return false;
}

修正后的main函数

async function main() {
    const startTime = Date.now();
    const timeRight = checkTime();
    // 正确调用假日判断函数并赋值(假设isMarketHoliday是返回布尔值的函数)
    const isMarketHoliday = isMarketHoliday(); 
    if (timeRight && !isMarketHoliday) {
        try {
            // 执行API请求逻辑
            // await yourApiCall();
        } catch (error) {
            console.error(error);
        }
    }
    const endTime = Date.now();
    console.log(`Function took: ${endTime - startTime} ms`);
}

定时调用代码(无修改)

setInterval(main, 25000); // 每25秒执行一次main函数

额外提示

  • 若需更可靠的时区处理,可考虑使用luxon等专业日期库,避免原生toLocaleString在某些环境下的兼容性问题;
  • 确保isMarketHoliday函数能正确返回布尔值,否则假日判断逻辑会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:53:10