纯html无法显示农历日期,必须用javascript调用lunar-javascript等成熟库实现;推荐cdn引入或npm安装,注意月份参数为1–12;避免document.write,应操作dom元素;服务端渲染更可靠,需统一时区并回归验证。

纯 HTML 无法直接计算或显示农历日期——它没有内置农历转换能力,必须借助 JavaScript 实现。所有“HTML 显示农历”的方案,本质都是 document.write 或 innerHTML 配合 JS 算法动态写入,静态 HTML 标签本身做不到。
用 JavaScript 调用轻量农历库(推荐)
别自己重写农历算法,容易出错且难维护。直接用经过验证的开源库最稳妥:
-
lunar-javascript(GitHub 上 star 较多,支持公历转农历、节气、干支、生肖、宜忌等) - 安装:
npm install lunar-javascript,或直接引入 CDN:<script src="https://cdn.jsdelivr.net/npm/lunar-javascript@2.0.4/dist/lunar.min.js"></script> - 基础用法示例:
const today = new Date();<br>const lunar = new Lunar(today.getFullYear(), today.getMonth() + 1, today.getDate());<br>console.log(lunar.lunarYear + '年' + lunar.lunarMonth + '月' + lunar.lunarDay + '日'); // 如:二〇二四年五月廿六
- 注意:
lunar-javascript的构造函数月份是 1–12(不是 JS 原生的 0–11),日也是 1–31,别传错参数
避免用 document.write 动态插入(常见坑)
很多老教程教你在 HTML 里写 <script>document.write(...) </script>,这在现代页面中极易出问题:
- 如果脚本放在
里,document.write会清空整个页面(浏览器尚未解析完 DOM 就执行写入) - 页面已加载完成后再调用
document.write,会触发全量重载,导致白屏、状态丢失 - 正确做法是等 DOM 加载后操作具体元素:
document.getElementById('lunar-date').textContent = lunarStr; - 对应 HTML 只需预留一个容器:
<span id="lunar-date"></span>
服务端渲染更可靠(适合 SEO 或首屏直出)
如果页面需要被搜索引擎抓取,或对首屏农历显示有强一致性要求(比如政务、黄历类网站),JS 客户端渲染存在延迟和时区偏差风险:
- Node.js 可用
lunar-js或chinese-lunar库,在模板中预计算(如 EJS:) - PHP 推荐
overtrue/chinese-calendarComposer 包,精度高、更新及时 - 关键点:服务端生成的农历日期基于服务器本地时间(通常设为东八区),而客户端 JS 基于用户本地时区——同一时刻,北京时间 23:59 和东京时间 00:59 可能跨农历日,这点必须对齐
农历计算涉及闰月、定朔、节气交节时刻等复杂天文规则,连专业库都可能在极端年份(如 2100 年前后)有微小偏差。上线前务必用已知农历日期(如 2025 年春节是公历 1 月 29 日)做回归验证,别只测今天。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











