农历 / 公历转换 · 生肖星座
公历转农历、农历转公历(含闰月反查)、生肖 / 星座 / 干支纪年速查与春节倒计时;农历数据由自托管的天文算法库 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-06;2030 年它把春节算成 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 年夏令时之类的时区偏移影响。