You need to enable JavaScript to run this app. 如何让内联JavaScript每秒执行,解决自制JS时钟不刷新问题
优惠活动
大模型
产品
解决方案
定价
更多

如何让内联JavaScript每秒执行,解决自制JS时钟不刷新问题

问题原因

你当前使用的setTimeout方法仅会在延迟1秒后执行一次showTime函数,因此时钟只会更新一次,无法持续刷新时间。

修复方案

有两种常用的实现方式可以解决这个问题:

方案1:使用setInterval定时执行

setInterval会按照设定的间隔持续重复执行目标函数,同时我们需要额外在页面加载时立即调用一次函数,避免前1秒显示默认的"clock"文本。
修改后的完整JS代码如下:

function showTime() {
  let date = new Date();
  let h = date.getHours(); // 0 - 23
  let m = date.getMinutes(); // 0 - 59
  let s = date.getSeconds(); // 0 - 59
  let session = "AM";

  if (h == 0) {
    h = 12;
  }

  if (h > 12) {
    h = h - 12;
    session = "PM";
  }

  h = (h < 10) ? "0" + h : h;
  m = (m < 10) ? "0" + m : m;
  s = (s < 10) ? "0" + s : s;

  let time = h + ":" + m + ":" + s + " " + session;
  document.getElementById("MyClockDisplay").innerHTML = time;
}
// 页面加载后立即显示第一次时间
showTime();
// 每1秒更新一次时间
setInterval(showTime, 1000);

方案2:递归调用setTimeout

如果要避免setInterval可能出现的执行累积误差,也可以在showTime函数末尾递归调用setTimeout,每次执行完成后再设定下一次的执行计划:
修改后的完整JS代码如下:

function showTime() {
  let date = new Date();
  let h = date.getHours(); // 0 - 23
  let m = date.getMinutes(); // 0 - 59
  let s = date.getSeconds(); // 0 - 59
  let session = "AM";

  if (h == 0) {
    h = 12;
  }

  if (h > 12) {
    h = h - 12;
    session = "PM";
  }

  h = (h < 10) ? "0" + h : h;
  m = (m < 10) ? "0" + m : m;
  s = (s < 10) ? "0" + s : s;

  let time = h + ":" + m + ":" + s + " " + session;
  document.getElementById("MyClockDisplay").innerHTML = time;
  // 执行完成后设定1秒后再次调用自身
  setTimeout(showTime, 1000);
}
// 页面加载后立即触发第一次执行
showTime();

HTML代码不需要做任何修改即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:45:03