企评社

农历 / 公历转换 · 生肖星座

公历转农历、农历转公历(含闰月反查)、生肖 / 星座 / 干支纪年速查与春节倒计时;农历数据由自托管的天文算法库 lunar-javascript 在你的浏览器里现算,与香港天文台官方历表一致,不联网、不上传

所有计算都在你的浏览器里完成,不上传

公历日期 → 农历年月日、生肖、干支、大小月

支持 1900 年 ~ 2100 年。生肖与干支年按农历年(正月初一)切换,与八字命理按立春切换的口径可能不同,年初出生的人两种口径会不一样。

农历、生肖与星座:几条最容易被搞错的常识

农历不是"阴历",它是阴阳合历,所以必须有闰月。农历的月份严格跟着月相走(朔为初一、望在十五前后),一个朔望月平均约 29.53 天,十二个月只有约 354 天,比回归年(约 365.24 天)少约 11 天。如果放任不管,不出几年春节就会跑到夏天去。古人的解法是让月份跟着月亮、年份跟着太阳:每 19 个回归年插入 7 个闰月(19 年 7 闰,19 个回归年 ≈ 235 个朔望月),闰月插在没有"中气"的那个月之后,所以闰四月、闰六月、闰十一月都会出现。这也解释了为什么农历生日换算成公历每年都不一样,前后能差一个多月。

大月 30 天、小月 29 天,不是固定的。农历每个月的天数取决于这个朔望月实际有多长(29.53 天上下浮动),所以哪个月是大月、哪个月是小月,年年不同,必须查历。本页的大小月直接取自天文算法库给出的每个农历月的天数,与官方历表的口径一致。这直接影响农历生日:腊月三十出生的人,遇到只有 29 天的年份就没有"三十"这一天,民间通常提前到二十九过,这也是本页在"农历转公历"里遇到不存在的日期时给出最接近合法日期的原因。

生肖和干支年有两种口径,年初出生的人会"差一个属相"。本页统一按农历年(正月初一)切换生肖与干支年:2026 年 2 月 16 日还是乙巳(蛇)年腊月廿九,2 月 17 日(正月初一)起才是丙午(马)年。但八字命理按立春切换,立春通常在 2 月 3–5 日,比春节早半个月左右,所以在"立春之后、春节之前"出生的人,两种口径会给出不同的属相与干支年;此外还有少数地区按公历 1 月 1 日切换的通俗说法。本页按农历年给结果并明确标注口径,填表、算八字这类用途请以对方要求的口径为准。

星座分界为什么每年会差一天。星座是按太阳在黄道上的位置(节气)划分的,分界点落在每年 20–23 日之间,随年份浮动:水瓶座从 1 月 20 日前后开始,摩羯座到 1 月 19 日前后结束。国际上流传的这套日期表本身就有多个版本,个别星座的起始日在不同资料里能差一天,所以"我到底是摩羯还是水瓶"这种边界日,不同网站给出不同答案并不奇怪。本页采用最通行的一套固定分界并把日期区间一起显示出来,落在分界当天时请把它当作"两套说法都说得通"来看待,而不是唯一答案;闰年 2 月 29 日按双鱼座处理(2 月 29 日在 2 月 19 日 – 3 月 20 日区间内)。

为什么这里要自己带一个天文算法库,而不是用浏览器自带的农历。现代浏览器确实内置了 ICU/CLDR 国际化数据库,标准 API Intl.DateTimeFormat 也支持 zh-CN-u-ca-chinese 这个历法扩展。但拿它和香港天文台官方「公曆與農曆日期對照表」逐日核对后发现,它并不是"总差一天",而是偶发错误2027 年它把春节算成 02-07,官方历表是 02-062030 年它把春节算成 02-02,官方历表是 02-03。农历差一天就是错的(查生日、算春节、办喜事都用它),所以本页改用自托管的天文算法库 lunar-javascript(MIT 许可)在你的浏览器里现算,它的结果与官方历表一致(2027 = 02-06、2030 = 02-03、2034 = 02-19、2033 年闰十一月)。它同样不需要联网,也就同样不需要把你输入的日期交给服务器。

为什么不上传到服务器。农历换算不需要任何后端能力:算历的算法库已经随页面一起下发到你的浏览器,全部计算都在本地完成。所以本页把全部计算放在你的设备上执行,你输入的生日、婚期、任何日期都不会离开浏览器(打开开发者工具的 Network 面板可以看到整页没有任何提交请求)。页面不写 localStorage、不写 cookie、不把输入写进网址,也不读取你的姓名或手机号——你算过什么,服务器一无所知,刷新后不留痕迹。

常见问题

我到底属什么?为什么有的网站说是上一个属相?

因为生肖的切换点有两种口径。本页按农历年(正月初一)切换:春节前属于上一个农历年,春节当天起进入新的生肖年。八字命理则按立春切换,立春一般比春节早半个月,所以"立春后、春节前"出生的人两种口径会得到不同属相。请按你的使用场景选口径,本页结果已标注是按农历年给出的。

为什么有的年份没有"腊月三十"?年三十去哪了?

农历大月 30 天、小月 29 天,取决于当月朔望月的实际长度,所以"腊月三十"不是每年都有。腊月只有 29 天时,除夕就落在腊月二十九(例如 2027 年 2 月 5 日就是腊月廿九)。本页在"农历转公历"里输入不存在的日期会明确提示,并给出最接近的合法日期(通常是同月的二十九)。

农历生日换成公历,为什么每年都不一样?

因为农历一年约 354 天、公历一年 365 天,两者每年差约 11 天;为了追上太阳,农历每隔两三年插一个闰月(19 年 7 闰),插入后又会"跳"回去。所以同一个农历生日对应的公历日期会在 1 月中到 2 月下旬之间来回移动,属于正常现象,不是算错了。

这里的农历数据准确吗?和手机日历、老黄历对不上怎么办?

农历数据由自托管的天文算法库 lunar-javascript(MIT)计算,与香港天文台官方公曆與農曆日期對照表一致;极端历史/未来年份仍以官方历书为准。主流年份(含 1900–2100 的常见日期、2020 年闰四月、2023 年闰二月、2033 年闰十一月)都经过核对。

"距离下一个春节还有多少天"是怎么算的?

页面直接向天文算法库查该农历年的正月初一(也就是春节),再和今天的日期按日历天相减。今天正好是春节时显示 0 天(今天就是春节)。天数差用本地日历日比较,不做毫秒加减,因此不受 1986–1991 年夏令时之类的时区偏移影响。

相关工具