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

时钟Span标签不更新:补0及0转12逻辑生效但页面无变化

问题分析与解决方案

我一眼就看出问题出在哪了——你把DOM更新和时间格式化的顺序搞反了!

你当前的代码是先把未处理的原始小时/分钟/秒直接赋值给对应的Span元素,之后才做补0、转12小时制的格式化处理。但这些处理后的变量值并没有重新同步到DOM里,所以虽然console.log能看到正确的格式化后数值,页面上的Span内容却还是最初的原始值,自然不会更新。

修正后的代码

function showTime(){ 
  const date = new Date(); 
  const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 
  
  // 第一步:先获取原始时间数据,不直接操作DOM
  let day = days[date.getDay()];
  let h = date.getHours(); 
  let m = date.getMinutes(); 
  let s = date.getSeconds(); 

  // 第二步:处理12小时制和补0逻辑
  if(h === 0){ 
    h = 12; 
  } else if(h > 12){ 
    h -= 12; 
  } 
  h = h < 10 ? `0${h}` : h; 
  m = m < 10 ? `0${m}` : m; 
  s = s < 10 ? `0${s}` : s; 

  // 第三步:把格式化后的最终值更新到DOM元素
  document.getElementById("day").innerHTML = day;
  document.getElementById("hour").innerHTML = h; 
  document.getElementById("minute").innerHTML = m; 
  document.getElementById("second").innerHTML = s; 

  setTimeout(showTime, 1000); 
  console.log(m); 
} 
showTime();

关键修改点说明

  • 调整顺序:先获取原始值→做格式化处理→最后更新DOM,确保页面渲染的是处理后的正确值
  • 优化条件判断:将h > 12的判断改为else if,避免在h已经被转为12后还执行减12的操作,逻辑更严谨
  • 简化字符串拼接:用ES6模板字符串0${h}替代传统的"0"+h,代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:18:32