中国本土 本地计算 开箱即用 内置示例 不留痕迹

农历公历转换工具

输入公历日期查农历,或输入农历年月日(可选闰月)查公历,同时给出干支年、生肖与星期。

家里长辈记生日用农历、传统节日要对着农历安排、老黄历上的干支年需要核对——农历与公历之间没有换算公式(阴阳合历对纯阳历,靠「十九年七闰」对齐季节),只能查表推算。本工具内置 1900~2100 年逐月天数数据,双向互转并给出干支年、生肖与星期。

两个口径提醒:一是范围,数据表覆盖 1900~2100 年,更早的历史日期涉及不同历法改革,结果不可靠;二是不同万年历在个别年份的闰月口径偶有出入(旧数据编纂差异),重要日期(如农历生日登记)建议与权威万年历再核对一次。

使用步骤

  1. 选方向:公历 → 农历,或农历 → 公历。
  2. 农历方向注意勾选闰月(该年若有闰月,闰几月要选对)。
  3. 看结果:农历日期、干支年、生肖、星期一次给出。
  4. 重要日期建议换一个万年历交叉核对后再使用。

计算原理与示例

农历和公历是怎么对应的

农历是一种阴阳合历:月份按月相(朔望月约 29.53 天)定,大月 30 天、小月 29 天;年为兼顾四季寒暑,采用「十九年七闰」的办法插入闰月。公历则是纯阳历。两套历法没有简单的换算公式,本工具内置 1900~2100 年逐月天数压缩数据表,按通行万年历数据逐日推算,结果与主流万年历一致。

闰月是怎么回事

闰月是农历为对齐季节而插入的整个月份。哪一年闰几月由二十四节气中「中气」的分布决定:没有中气的月份定为闰月,沿用前一个月的月号加「闰」字,如 2023 年闰二月、2033 年闰十一月。转换涉及闰月时请把「月份类型」选为闰月,并确认该年确有此闰月——选错时工具会明确报错,而不是猜一个日期。

干支年和生肖按哪天算

干支年与生肖按农历年编号划分:正月初一(含)之后才算新年份的干支与生肖。例如 2024-02-10 是甲辰年正月初一,从这天起出生属龙;此前出生仍属癸卯兔年。这与按公历年或立春划分的口径不同——若你用生肖计算器(公历年口径)查询,春节前后出生者两种结果可能差一位,属正常现象。

计算依据:内置 1900~2100 年农历月大小与闰月压缩数据表(公开万年历数据,与 MIT 许可的 calendar.js 同源),以 1900-01-31(农历正月初一)为历元逐日推算;已用 2024/2025/2026/2023/1984 年春节、2020 端午、2025 中秋、2023 闰二月、2033 闰十一月等锚点交叉验证。干支与生肖按农历年编号。

代码示例

JavaScript solarlunar 双向互转

// npm install solarlunar
const solarlunar = require("solarlunar");

solarlunar.solar2lunar("2026-02-17");
// { lYear: 2026, lMonth: 1, lDay: 1, gzYear: "丙午", animal: "马", ... }

solarlunar.lunar2solar(2026, 1, 1);   // 农历正月初一 → 公历

Python lunarcalendar 转换

# pip install lunarcalendar
from lunarcalendar import Converter, Lunar

lunar = Lunar(2026, 1, 1, isleap=False)
Converter.Lunar2Solar(lunar).to_date()   # datetime.date(2026, 2, 17)

# isleap 参数对应闰月;闰四月传 month=4, isleap=True

常见问题

为什么农历没有简单的换算公式?

因为朔望月(29.5306 天)与回归年(365.2422 天)不成整数比,农历靠逐月安排大小月和置闰来对齐季节,每年每月的天数与闰月位置都要按天文数据确定,只能查表或用天文算法计算。本工具采用权威万年历数据表,覆盖 1901~2100 年。

2023 年为什么有两个二月?

2023 年农历闰二月,当年有两个「二月」:先过平二月,再过闰二月,闰二月从公历 3 月 22 日开始。查询时注意区分:把月份类型选成「闰月」查到的才是闰二月的日期,不选查到的是平二月。

春节、端午、中秋这类节日能直接查吗?

可以间接查:春节是农历正月初一,端午是五月初五,中秋是八月十五,除夕是腊月的最后一天(可能是三十,也可能是廿九)。例如把 2024-02-10 输进去,转出来正是甲辰年正月初一,即 2024 年春节。

农历生日每年公历日期都不一样?

是的。农历平年比公历年短约 11 天,所以农历生日在公历中通常每年提前约 11 天,遇到闰月又会推后约 19 天,整体在一段公历区间内摆动。用本工具把农历生日转成公历,即可知道某一年对应哪天。

1901 年之前的日期能转吗?

不能。本工具数据表覆盖 1901~2100 年,超出范围会明确提示。更早的日期涉及历史历法变更(时宪历细节、太平天国历等),普通万年历数据不适用,建议查阅专业历法资料。

农历的月份为什么有大有小?

农历按月相定月:从朔(新月)到下一个朔是一个朔望月,平均 29.53 天,有时略长于 29 天、有时略短于 30 天,所以农历大月 30 天、小月 29 天,哪个月大哪个月小由天文定朔决定,没有固定规律。腊月也可能是 29 天,所以「除夕」不一定是大年三十。

转换结果会被上传吗?

不会。转换完全在浏览器本地完成——查内置数据表做加减法,没有任何网络请求。查询历史仅保存在你自己的浏览器 localStorage,可一键清空,无痕模式下关闭页面即消失。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。