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

JavaScript问题:setInterval调用metro函数时new Date()未实时更新

问题原因

你现在的问题出在传递给setInterval的时间参数是固定值:hourNow和minutesNow只在代码初始化的时候计算了一次,也就是你创建定时器那一刻的时间,之后每30秒触发定时器时,只会重复传递这两个已经固定的旧值,不会重新获取当前时间。

解决办法

有两种简单的修复方式:

方式一:在metro函数内部实时获取时间

把获取当前时间的逻辑移到metro函数里,这样每次函数被调用时都会重新计算最新时间:

const interval = setInterval(metro, 30000);

function metro() {
  // 每次调用都重新获取当前时间
  let now = new Date();
  let hourNow = now.getHours();
  let minutesNow = now.getMinutes();
  // 你的业务逻辑代码
}

方式二:用匿名函数包裹,每次触发时重新计算时间

如果必须要给metro传时间参数,可以在定时器的回调里实时计算最新时间,再传给metro:

const interval = setInterval(() => {
  let now = new Date();
  let hourNow = now.getHours();
  let minutesNow = now.getMinutes();
  metro(hourNow, minutesNow);
}, 30000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:44:16