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

如何实现从每小时第1分钟启动的JS整点循环倒计时

每小时偏移1分钟节点的倒计时实现方案

修正逻辑

你的需求核心是把倒计时的周期锚点从「每小时整00分」调整为「每小时01分00秒」,之前自行修改的代码出现60分显示问题,是因为同时叠加了分钟偏移和结果值+60的重复计算,导致整00分节点数值溢出。

正确计算逻辑只需要两步:

  • 计算当前时间距离最近一个「每小时01分00秒」节点已经流逝的秒数
  • 用单周期总秒数3600减去流逝秒数得到剩余秒数,再拆分出分钟、秒值即可
  • 额外补全两位数显示逻辑,避免出现个位数时间只显示1位的问题,同时移除原代码中无意义的toLocaleString()冗余调用

修正后完整代码

JavaScript 逻辑

var byId = document.getElementById.bind(document);

// 补零函数,保证分钟、秒始终显示两位数
const padZero = (num) => String(num).padStart(2, '0');

function updateTime() {
  const time = new Date();
  // 计算当前时间在本小时内的总秒数
  const currentSecsInHour = time.getUTCMinutes() * 60 + time.getUTCSeconds();
  // 锚点偏移60秒(即每小时第1分钟位置),计算已流逝秒数,兼容整00分的跨节点计算
  const passedSecs = (currentSecsInHour - 60 + 3600) % 3600;
  // 计算剩余总秒数
  const secsRemaining = 3600 - passedSecs;
  // 拆分分钟、秒数值
  const mins = Math.floor(secsRemaining / 60);
  const secs = secsRemaining % 60;

  byId('min-part').textContent = padZero(mins);
  byId('sec-part').textContent = padZero(secs);

  // 对齐系统毫秒数,保证每秒精准触发
  setTimeout(updateTime, 1000 - time.getUTCMilliseconds());
}
updateTime();

HTML 结构

<div>Time left before update: <span id="min-part"></span>:<span id="sec-part"></span></div>

效果校验

  • 系统时间为14:00:59时,距离14:01:00节点剩余1秒,页面显示00:01
  • 系统时间为14:01:01时,距离15:01:00节点剩余3599秒,页面显示59:59
  • 每到整小时的01分00秒节点,倒计时自动重置为60:00并开始下一轮计数,不会出现60分以上的溢出显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:12:33