用 setinterval 每秒调用 updateclock 函数,内部用 new date().tolocaletimestring('zh-cn', {hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit'}) 格式化并 textcontent 更新 id="clock" 元素,首次立即执行避免空白,注意浏览器节流和主线程阻塞导致的跳秒。

直接用 setInterval 配合 new Date() 就能实时更新,不需要框架或额外库。
怎么用 setInterval 每秒刷新时间
核心是定时执行一个函数,从 new Date() 获取当前时间,再写入页面元素。关键不是“怎么显示”,而是“怎么避免时间跳变和时区错乱”。
- 把时间格式化逻辑写在定时器内部,不要只靠
toLocaleTimeString()默认行为——它依赖用户系统时区,上线后可能集体偏 8 小时 - 推荐用
date.toLocaleTimeString('zh-CN', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' }),显式指定语言和格式 - 别用
document.write()或反复innerHTML = ...,优先选textContent更新文本节点,性能更好也更安全
HTML 里放个容器,JS 找得到就行
不需要 ID 或 class 做复杂选择,最简方式就是给元素加一个明确的 id,比如 id="clock"。JS 用 document.getElementById('clock') 拿到它即可。
<div id="clock"></div>
<script>
const clockEl = document.getElementById('clock');
function updateClock() {
const now = new Date();
clockEl.textContent = now.toLocaleTimeString('zh-CN', {
hour12: false,
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
}
updateClock(); // 立即执行一次,避免首屏空白
setInterval(updateClock, 1000);
</script>
为什么有时秒数会“卡住”或跳两秒
这不是代码写错了,是浏览器节流或 JS 主线程阻塞导致的。常见原因有:
- 用户切到其他标签页时,多数浏览器会把
setInterval降频到最低 1s 甚至暂停(尤其 Chrome),醒过来第一帧可能漏掉一两个 tick - 如果页面同时跑大量计算、动画或未优化的监听器,
updateClock可能被延后执行 - 别用
setTimeout递归代替setInterval——看似“更准”,实际更容易累积延迟
真要高精度(比如倒计时对账),得用 performance.now() 或服务端时间校准,前端纯 JS 的 setInterval 本质就是“尽力而为”。
要不要加时区或日期?看需求再决定
只显示时分秒,上面那段代码够用。如果需要年月日,就把 toLocaleTimeString 换成 toLocaleString,并补全选项:
now.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour12: false,
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
})
但注意:一旦加了日期,字符串变长,DOM 更新时可能引发小范围重排;如果放在导航栏等高频渲染区域,建议用固定宽度容器 + font-variant-numeric: tabular-nums 保持数字对齐,否则“10:00:00”和“9:59:59”宽度不同,文字会轻微晃动。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











