最直接有效的方式是用 setinterval 每秒调用 updateclock 函数,通过 new date().tolocaletimestring('zh-cn', {hour12: false}) 获取并格式化时间,写入 dom;需监听 visibilitychange 补救后台节流,并用服务端时间校准本地偏移量以保障准确性。

用 setInterval 配合 new Date() 最直接有效
页面上实时显示当前时间,核心就是定时更新 DOM。最常用也最稳妥的方式是用 setInterval 每秒调用一次更新函数,里面用 new Date() 获取当前时间对象,再格式化写入元素内容。
注意别用 setTimeout 递归代替——容易因执行延迟导致跳秒或累积误差;也别把 setInterval 间隔设成 100 毫秒去“追求精度”,浏览器渲染帧率和 JS 主线程压力会让你得不偿失。
示例(写入 ID 为 clock 的 <span></span>):
function updateClock() {
const now = new Date();
const timeStr = now.toLocaleTimeString('zh-CN', { hour12: false });
document.getElementById('clock').textContent = timeStr;
}
setInterval(updateClock, 1000);
updateClock(); // 立即执行一次,避免首屏空白
toLocaleTimeString 的参数决定显示效果,别硬拼字符串
手动拼接 getHours() + getMinutes() + getSeconds() 看似灵活,但会漏掉时区、夏令时、本地化分隔符(比如中文习惯用“:”而非英文冒号)等问题。直接用 toLocaleTimeString 更可靠。
常见配置组合:
-
{ hour12: false }→ 24 小时制(如 “10:34:26”) -
{ hour12: true, hour: '2-digit', minute: '2-digit' }→ “上午10:34” -
{ timeZone: 'Asia/Shanghai' }→ 强制按北京时间,避免用户系统时区错乱
如果需要带年月日,改用 toLocaleString(),传同样参数即可。
页面切到后台时 setInterval 可能被节流,要用 visibilitychange 补救
现代浏览器对非活跃标签页会降低 setInterval 频率(可能变成每秒几次甚至更慢),导致时间显示卡顿或跳秒。这不是 bug,是性能优化策略。
解决办法是监听页面可见性变化,在重新激活时立刻刷新一次:
document.addEventListener('visibilitychange', () => {
if (!document.hidden) {
updateClock(); // 页面回到前台,立即同步时间
}
});
同时建议在 updateClock 函数开头加个简单校验:如果发现当前秒数比上次记录值跳变了 ≥2 秒,就认为发生了节流,强制重置计时逻辑(比如清掉旧 interval 再新建一个)。
服务端时间不准?用 Date.parse() 校准一次初始值
纯前端时间完全依赖用户设备系统时间,如果用户手机/电脑时间错了,页面时间一定错。若业务对时间准确性有要求(比如倒计时、限时活动),必须和服务端时间对齐。
做法是首次加载时发一个轻量请求(如 GET /api/time),返回 ISO 格式时间字符串(如 "2026-08-26T10:34:26+08:00"),然后用 Date.parse() 转成毫秒数,再计算与本地 new Date().getTime() 的偏移量。后续每次更新都基于这个偏移做修正:
let offset = 0;
fetch('/api/time').then(r => r.text()).then(serverTime => {
const serverMs = Date.parse(serverTime);
const localMs = new Date().getTime();
offset = serverMs - localMs;
});
// 更新函数里:
const corrected = new Date(Date.now() + offset);
这个偏移量不能长期复用——网络延迟、设备休眠都会影响,建议每 5–10 分钟重新校准一次,或只在校准后前 2 分钟内启用高精度模式。
真正难的不是让时间动起来,而是让动起来的时间在各种异常场景下依然可信:标签页切走又切回、用户手动改了系统时间、网络延迟抖动、跨时区访问……这些细节不处理,用户第一眼看到的就是“这网页时间不准”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











