正确获取并显示中文星期需用 getday() 返回值作为索引映射到中文数组:const weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; weekdays[now.getday()]。

直接用 Date 对象 + setInterval 就能稳定跑起来,但“显示星期”这一步最容易出错——很多人用 getDay() 返回 0–6 后没映射到中文数组,结果页面上出现 “星期0”。
如何正确获取并显示星期几(中文)
浏览器的 getDay() 返回的是 0(星期日)到 6(星期六),不是 1–7,也不能直接拼字符串。必须手动映射。
- 定义中文星期数组:
const weekDays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; - 调用
weekDays[now.getDay()]获取对应文本,别写成now.getDay() + 1 - 如果用
toLocaleDateString("zh-CN", { weekday: "long" }),注意它依赖系统 locale,部分旧版 Safari 可能返回英文 - 避免在格式化时把
getDay()当作日期字段参与拼接,比如误写成${now.getDay()}月${now.getDate()}日
数字时钟每秒更新的最小可靠实现
用 setInterval(updateTime, 1000) 是主流做法,但它有隐性风险:如果页面卡顿或函数执行超 16ms,下一次调用可能堆积或跳秒。
- 推荐封装为自调用函数,每次更新后立即安排下次执行:
function tick() { updateTime(); setTimeout(tick, 1000); } - 优先用
textContent而非innerHTML更新时间容器,避免 HTML 解析开销和潜在 XSS - 不要在
setInterval回调里反复new Date()多次——一次实例就够了,再从它取年、月、日、时、分、秒 - 补零逻辑统一用
.padStart(2, "0"),比手写if (h 更安全
同时显示日期+时间+星期的格式拼接要点
常见错误是月份、日期、小时等字段漏加 1 或漏补零,导致 “2026-8-26 10:5:2” 这类不一致格式。
-
getMonth()必须 +1,因为返回 0–11;getDate()和getHours()等不用加 - 建议统一提取后处理:
const month = String(now.getMonth() + 1).padStart(2, "0"); - 完整格式示例:
${year}年${month}月${day}日 ${week} ${hour}:${minute}:${second} - 若需兼容性更强,避开
toLocaleString()的区域差异,就别依赖它的自动分隔符,自己控制拼接
农历、节气、生肖这些属于额外计算模块,不能靠 Date 原生 API 得到,得引入专门的农历转换库或预置查表逻辑——这点常被当成“基础功能”忽略,结果上线后发现所有传统日期全是错的。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











