应使用 china-holidays 库动态判断节假日,调用 isholiday() 和 isworkday() 结合识别法定假日与调休工作日,注意用 utc+8 时间构造日期并避免本地时区偏差。

怎么用 JavaScript 动态标记节假日(不是硬编码)
纯 HTML 无法自动识别节假日,必须靠 JS 补充逻辑。国内节假日没有标准 HTTP 接口,最靠谱的是用开源库 china-holidays 或 chinese-lunar-javascript 解析公历/农历转换和法定调休规则——它内置了 2008–2030 年国务院发布的放假安排,包括调休补班日。
别自己维护日期数组,每年都要改,而且漏掉“周日上班补班”这种反直觉情况是大概率事件。
-
npm install china-holidays后,在日历渲染循环中调用isHoliday(date)和isWorkday(date) - 注意:该库返回的
isHoliday为true表示「法定假日」,但不等于「休息日」;需结合isWorkday判断是否真要标灰或加角标 - 如果项目不能用 npm(比如纯静态页),可直接下载其
dist/china-holidays.min.js,用<script src="..."></script>引入
HTML 日历表格里怎么给节假日单元格加样式
关键不是“怎么加 class”,而是“加在哪一层”。常见错误是给整个 <td> 加背景色,结果覆盖了日期数字、遮挡点击区域。正确做法是用伪元素或内联子标签承载标记。
<ul><li>在 <code><td> 内插入一个 <code><span class="holiday-badge">休</span>,再用 CSS 控制位置(position: absolute + top: 2px; right: 2px)
background-color 填满单元格,改用 border-left: 3px solid #e74c3c 这类轻量视觉提示,不影响可读性和交互class="holiday-badge statutory" vs class="holiday-badge adjust"
为什么用 Date() 构造节假日判断总出错
JS 的 Date 对象默认使用本地时区,而节假日判定必须基于东八区(UTC+8)时间。当用户浏览器设为美国/欧洲时区,new Date(2025, 0, 28) 可能解析成 1 月 27 日晚上的时间,导致跨日误判。
- 统一用 UTC 时间构造:写成
new Date(Date.UTC(2025, 0, 28)),再转为北京时间比较 - 更稳妥的做法是用
date-fns-tz的zonedTimeToUtc,或直接传字符串'2025-01-28T00:00:00+08:00'构造 - 特别注意:农历节日(如春节)必须先转公历再比对,不能拿农历日期直接塞进
Date
移动端日历节假日标记点不中的问题怎么解
很多日历组件在 iOS 上点击 <span class="holiday-badge"></span> 没反应,是因为 Safari 对绝对定位小元素的点击热区太小,且默认禁用 :active 状态。
- 给 badge 加
style="min-width: 16px; min-height: 16px;",确保触控面积达标 - 加
cursor: pointer和-webkit-tap-highlight-color: transparent消除点击延迟和高亮干扰 - 如果需要点击弹出放假说明,别绑定在 badge 上,改用整格
<td> 的 <code>data-holiday="spring-festival"属性统一处理真正麻烦的不是标颜色,而是调休逻辑和时区对齐——这两块没压准,前端标得再好看,数据也是错的。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











