使用方法
- 默认停在「公历转农历」,三个框已经填好 2026 年 2 月 17 日。点「转换」,或在这三个数字框里按回车,结果区立刻给出对应的农历日期。
- 公历三个框的范围分别是年 1900 到 2050、月 1 到 12、日 1 到 31。填了不存在的日期(比如 2025 年 2 月 30 日)会给出指明月份天数的提示。
- 切到「农历转公历」,下面四个控件生效:农历年 1900 到 2050、农历月 1 到 12、农历日 1 到 30,外加一个「闰月」勾选框。
- 「闰月」只在当年确实有闰月时才勾。2025 年闰六月:勾上闰月、月填 6、日填 1 得 2025-07-25;不勾、月填 7、日填 1 得 2025-08-23。当年没有闰月却勾了,会提示具体年份。
- 结果区分两层:上面一行是结论,下面一段是明细——星期几、干支纪年、生肖、这一农历月是 30 天还是 29 天、当年闰几月,以及这一天距基准日 1900-01-31 的天数。
- 明细下面是一张 151 行的春节表,列出 1900 到 2050 每一年正月初一对应的公历日期与当年闰月、全年天数。默认显示 12 行,点「加载更多」展开全部,点「导出 CSV」存成带字节序标记的文件。
- 「交换方向」把模式反过来,并把刚算出的结果填进另一侧的控件。
- 「重置」把输入框恢复成默认的 2026-02-17 并重新计算;「复制结果」复制整段明细;「复制对照表」复制正文那张 15 条锚点表,制表符分隔。
- 整页不联网、不写本地存储,输入的日期只参与这一次计算。
这个农历公历转换器能解决什么问题
农历日期在公历上每年都在跑。2025 年正月初一是 1 月 29 日,2026 年却跑到 2 月 17 日,前后差 19 天;端午、中秋、重阳同样一年一挪。要排值班表、订车票、给农历生日设提醒,第一步就是把农历月日换成公历日期。这件事没法心算:农历年的长度本身就不固定,2025 年有 384 天(闰六月,29 天),紧挨着的 2026 年只有 354 天。
第二类问题出在闰月上。闰六月出生的人,在没有闰六月的年份里过生日,按六月过还是按七月过,家里能争论好几年。本页先把出生那年的闰月如实转成公历——2025 年闰六月初一就是 2025-07-25——拿到真实日期后再决定往后按哪个月过。
第三类是干支与生肖的换年口径。本页以正月初一换年:2026-02-17 之前仍算乙巳蛇年,当天起才是丙午马年。若你查的是八字命理,那一边以立春为界。
第四类是旧籍与家谱的日期定位。老谱牒常写「庚子年七月初七」这类干支加月日的表述,本页先用干支把年份圈定(干支 60 年一循环,庚子对应 1900、1960、2020 等),再把月日换算成具体某天。
计算原理与变量说明
整页只有两个部件:一张 151 项的年度位域表,和一段按天推进的循环。每一项是一个整数,用位域把这一年的月份结构压进去,读法如下。
| 位域 | 位数 | 含义 |
|---|---|---|
| 低 4 位 | 4 | 闰几月,0 表示这一年没有闰月 |
| 位 4 至位 15 | 12 | 正月到腊月每月天数,1 为 30 天、0 为 29 天,正月在最高位 |
| 位 16 | 1 | 闰月天数,1 为 30 天、0 为 29 天 |
1900 年那一项是 0x04bd8:低 4 位等于 8,表示这一年闰八月;位 16 为 0,表示闰八月只有 29 天。推进时先算出待查日期与基准日 1900-01-31 相差多少天,再从 1900 年起逐年减掉该农历年的总天数,减到不够减为止,剩下的余数在这一年内按月扣。年度总天数从 348(12 × 29)起算,只对「大月」标志位逐个加 1,最后再加闰月天数;没有闰月时闰月天数按 0 计,不能按 29 计,否则每年凭空多出 29 天,151 年会全部错位。月推进时遇到闰月,只插入一个月份而不推进月份序号,闰月因此紧跟在它所闰的那个月之后。
闰月的规则是「无中气则置闰」。二十四节气按太阳黄经每 15 度一个,共 24 个,排在单数位的叫节气、双数位的叫中气,两个中气的间隔约 30.436875 天(365.2422 ÷ 12),而一个朔望月只有 29.530588853 天。朔望月比中气间隔短,于是每隔几年就会有一个朔望月里一个中气都落不进去,那个月就被定为上一个月的闰月。这就是为什么闰月既没有固定月份、也没有可推算的年份规律。
19 年 7 闰只是巧合级的近似。19 个回归年 = 19 × 365.2422 = 6939.6018 天,235 个朔望月 = 235 × 29.530588853 = 6939.68838046 天,两者只差 0.0865804550003 天。本表 151 年里共有 56 个闰月年,折合每 19 年 7.05 闰——接近但并不是精确的 7,不能拿它去推某一年闰几月。
不补闰会怎样。12 个朔望月 = 354.367066236 天,比回归年 365.2422 天每年亏 10.875133764 天。这笔亏空全靠闰月补回来,不补的话十几年后春节就会挪到夏天去。
干支与生肖的算法。干支 60 年一循环、生肖 12 年一循环,取天干用 (年 − 4) % 10、取地支与生肖用 (年 − 4) % 12。2026 年得丙午、生肖马;1949 年得己丑、生肖牛。本页以正月初一换年,八字命理以立春为界,两者不是一回事。
本页不算节气。1645 年《时宪历》起节气由「平气」改为「定气」(按太阳真实黄经每 15 度一个),所以节气在公历上只在正负一天内浮动,1645 年之前的史料不能按定气反推。精确算节气需要太阳黄经的 VSOP87 级数——几百项三角级数——本页只做日期互转。
完整示例(数值仅作演示)
打开页面的默认值是公历 2026 年 2 月 17 日,结果是农历丙午年(马年)正月初一,星期二,距基准日 1900-01-31 第 46038 天。2026 年没有闰月,全年 354 天。
闰月场景:切到「农历转公历」,勾上闰月、年 2025、月 6、日 1,得 2025-07-25;不勾闰月、月填 7、日填 1,得 2025-08-23。中间夹着的就是那个 29 天的闰六月。
节日核对:2024-09-17、2025-10-06、2026-09-25 三天都是八月十五;2024-06-10 与 2025-05-31 都是五月初五。反过来查八月十五,应还原出这几个公历日期。
历史日期:1949-10-01 是己丑年八月初十(星期六);1900-01-31 是庚子年正月初一(星期三),也是本表唯一不需要推进的基准日。2050 年正月初一落在 2050-01-23。
农历与公历对照表
第一张表是 15 条自测锚点,覆盖春节、端午、中秋、闰月初一与历史日期,「复制对照表」复制的就是它。
| 公历日期 | 农历日期 | 说明 |
|---|---|---|
| 1900-01-31 | 正月初一 | 庚子年,本表基准日 |
| 1949-10-01 | 八月初十 | 己丑年 |
| 2020-01-25 | 正月初一 | 庚子年,鼠 |
| 2020-05-23 | 闰四月初一 | 2020 年闰四月 |
| 2023-01-22 | 正月初一 | 癸卯年,兔 |
| 2023-03-22 | 闰二月初一 | 2023 年闰二月 |
| 2024-06-10 | 五月初五 | 端午 |
| 2024-09-17 | 八月十五 | 中秋 |
| 2025-01-29 | 正月初一 | 乙巳年,蛇 |
| 2025-05-31 | 五月初五 | 端午 |
| 2025-07-25 | 闰六月初一 | 2025 年闰六月 |
| 2025-08-23 | 七月初一 | 闰六月之后的正七月 |
| 2025-10-06 | 八月十五 | 中秋 |
| 2026-02-17 | 正月初一 | 丙午年,马 |
| 2026-09-25 | 八月十五 | 中秋 |
第二张表抽出 12 个闰月年,连同当年闰几月与全年天数;全年天数要么 354 左右、要么 384 左右,差别就在闰月上。
| 农历年 | 闰月 | 全年天数 | 农历年 | 闰月 | 全年天数 |
|---|---|---|---|---|---|
| 1900 | 闰八月 | 384 | 1984 | 闰十月 | 384 |
| 1949 | 闰七月 | 384 | 1995 | 闰八月 | 384 |
| 1957 | 闰八月 | 384 | 2014 | 闰九月 | 384 |
| 1976 | 闰八月 | 384 | 2020 | 闰四月 | 384 |
| 1979 | 闰六月 | 384 | 2023 | 闰二月 | 384 |
| 1982 | 闰四月 | 384 | 2025 | 闰六月 | 384 |
第三张表给出 2020 到 2031 的干支与生肖,用来核对结果明细里的纪年:60 年一循环与 12 年一循环不是同一件事。
| 年份 | 干支 | 生肖 | 年份 | 干支 | 生肖 |
|---|---|---|---|---|---|
| 2020 | 庚子 | 鼠 | 2026 | 丙午 | 马 |
| 2021 | 辛丑 | 牛 | 2027 | 丁未 | 羊 |
| 2022 | 壬寅 | 虎 | 2028 | 戊申 | 猴 |
| 2023 | 癸卯 | 兔 | 2029 | 己酉 | 鸡 |
| 2024 | 甲辰 | 龙 | 2030 | 庚戌 | 狗 |
| 2025 | 乙巳 | 蛇 | 2031 | 辛亥 | 猪 |
读法:第一张看锚点是否对得上,差一天就说明推进逻辑有问题;第二张看闰月年,151 年里共 56 个;第三张看纪年。
结果边界、舍入与适用说明
- 公历年留空或不是整数时提示请填 1900 到 2050 之间的整数;超出范围时提示数据表只有这 151 年。
- 公历月超出 1 到 12、公历日超出 1 到 31,分别给出指明范围的提示,不自动归到边界值。
- 填了日历上不存在的日期(如 2025-02-30)时提示该月实际有多少天。
- 早于 1900-01-31 的日期提示它早于本页基准日;2050 年之后的农历年不在表内。
- 农历日填 30 而该月只有 29 天时,提示具体是哪一年哪一月只有 29 天。
- 勾了「闰月」但当年没有闰月、或闰的不是这一月时,分别给出指明年份与月份的提示。
- 本页没有小数运算,也就不存在舍入:结果都是整数天数的推进。
- 干支与生肖以正月初一换年;以立春换年的八字口径不在本页范围内。
- 本页不输出节气、月相与宜忌,也不处理时区:日期按纯日期对待。
常见问题
2026 年春节为什么到 2 月 17 日这么晚?
因为上一个农历年 2025 年闰六月,全年 384 天,比 2026 年的 354 天多出 30 天,把下一年的正月初一整体推后了。上一年有闰月,下一年春节必然偏晚。
闰月出生的人怎么过生日?
先把出生那年的闰月换成公历拿到真实日期:2025 年闰六月初一是 2025-07-25。多数家庭在没有闰六月的年份按六月过,也有人按公历日期过,选哪一天由家里定。
干支和生肖按正月初一还是立春?
本页按正月初一,2026-02-17 起才是丙午马年。八字命理按立春换年,与这里不是同一套口径,1、2 月出生的人两种算法会差一年。
为什么不能查 2051 年以后的农历?
因为数据表只有 1900 到 2050 共 151 项,覆盖到 2051-02-10 为止。再往后需要新的数据表,本页不会外推。
这个页面能算节气吗?
不能。精确算节气需要太阳黄经的 VSOP87 级数,是几百项三角级数的量级;1645 年《时宪历》之后又改成按真实黄经定气,本页只做日期互转。
农历月为什么有时 29 天有时 30 天?
因为农历月跟着朔望月走,一个朔望月是 29.530588853 天,不是整数。朔的时刻落在哪一天,哪一天就是初一,这个月因此是 29 天或 30 天,由数据表里的标志位记录。
1900 年之前的日期能查吗?
不能。本表的基准日是 1900-01-31,更早的日期没有表项可推进。清代及以前的历法还有平气与定气之分,即使有表也不能直接套用。
输入的日期会上传到服务器吗?
不会。输入框里的数字只在本页的脚本里参与整数加减,没有发起任何网络请求,也没有写入本地存储。