javascript获取系统时间转农历需借助lunar-javascript等库,因浏览器原生不支持;调用lunardate()时注意月份参数为1–12,需对getmonth()+1;该库轻量可靠,覆盖闰月、春节浮动、立春划年等边界情况。

用 JavaScript 获取系统时间并转农历需要额外计算
浏览器原生不提供农历转换接口,new Date() 只能拿到公历时间。想显示“2024年10月25日 星期五 农历甲辰年九月廿三”,必须自己实现或引入轻量农历算法。
推荐用 lunar-javascript 库(仅 4KB)
它不依赖 moment 或 dayjs,纯函数式,适合直接嵌入页面。CDN 引入后调用 lunarDate() 即可:
<script src="https://cdn.jsdelivr.net/npm/lunar-javascript@1.2.0/dist/lunar.min.js"></script><script>
function updateDateTime() {
const now = new Date();
const lunar = lunarDate(now.getFullYear(), now.getMonth() + 1, now.getDate());
document.getElementById('time').textContent =
`${now.toLocaleString('zh-CN')} 农历${lunar.lYear}年${lunar.lMonth}月${lunar.lDay}日`;
}
updateDateTime();
setInterval(updateDateTime, 1000);
</script>
注意:lunarDate() 的月份参数是 1–12(不是 0–11),别直接传 getMonth() 结果。
手动实现农历转换容易出错的三个点
网上很多“几行代码搞定农历”的示例实际只处理了节气或固定年份,真正可靠需考虑:
- 闰月判定逻辑复杂,2025 年有闰六月,但多数简版算法会漏掉
- 农历新年日期每年浮动(最早 1 月 21 日,最晚 2 月 20 日),不能硬编码偏移
- 干支纪年(如甲辰年)和生肖(龙年)要同步更新,且以立春为界,不是正月初一
如果你只需要显示“农历日期”而不要节气/干支,lunar-javascript 已覆盖全部边界情况;若需节气或八字排盘,得换更重的库(比如 cn-calendar),但体积翻 5 倍以上。
DOM 更新频率别设太密
用 setInterval(updateDateTime, 1000) 足够,没必要 100ms 刷新。农历部分每天只变一次,秒级刷新只是为同步公历时间。另外,避免在 updateDateTime 里重复创建 lunarDate 实例或拼接字符串——这些操作本身不耗时,但频繁触发可能影响低端设备帧率。
农历计算本身无副作用,但每次调用都要查表+运算,高频调用没收益反而增加 CPU 毛刺。真要省资源,可以每分钟更新农历部分,每秒更新时分秒。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











