piapia123
zh

公历农历转换

转换

所有处理都在浏览器本地完成,数据不上传服务器

输入
输出

填一个公历日期(`2026-09-27`),右边给出农历日期、干支、生肖、星座与节气;带上时间(`2026-09-27 14:30`)还会给出十二时辰。也可以反过来:把「换算方向」改成农历 → 公历,输入 `2026年八月十七`。 农历不是一个公式,是一份天文历表。 哪个月是大月、哪一年有闰月,取决于朔(新月)与中气(太阳黄经是 30° 整数倍的那一刻)落在哪一天 —— 这两件事都要用高精度的天文级数去算,系数表长得没法凭记忆写对。开发时先试过自己实现,但判据是「代入几个有把握的春节日期看对不对」,而没有可靠的参照:系数一旦在某一年把闰月放错,屏幕上显示的仍是一个完全正常的农历日期,没有任何东西会露馅。所以这里用了现成的库,并且把它钉在 28 个我独立知道答案的日期上(1980–2027 的 17 个春节、6 个中秋、5 个端午,全部一致)。那份对照表就在测试里。 闰月必须写明。 `2026-08-17` 这种数字写法本身分不出是八月还是闰八月,而两者的公历日期能差一个月。所以数字写法一律按非闰月读 —— 闰月要么在汉字写法里写「闰二月」,要么把「闰月」那个勾选框打开。 十二时辰与「早子时 / 晚子时」。 时辰是把一天切成十二段,每段两小时,从 23:00 起的子时开始。麻烦的是子时跨了午夜:23:00–24:00 与 00:00–01:00 都叫子时,但在八字里前者算第二天的子时(晚子时),后者算当天的(早子时)。这个工具按钟表给时辰(23:00 就是子时),并把这条差别写在结果旁边 —— 排八字要按另一条规矩,那是另一件事。 ⚠️ 这个页面会动态载入一份农历数据(四百多 KB),只有你真的填了日期才会下载。别的工具页一个字节都不多。 全程本机计算,日期不上传。

功能

  • 双向换算:公历 → 农历、农历 → 公历(农历认「八月十七」「8月17」两种写法)
  • 农历日期给汉字与数字两种写法 —— 汉字是给人读的,数字是拿去计算的
  • 闰月单独标注,输入时也要明确指明(数字写法分不出八月与闰八月)
  • 干支的年、月、日三个都给,另给生肖与星座
  • ⚠️ 星座补上符号、元素(火 / 土 / 风 / 水)与日期区间 —— 「我是狮子座」之外,用户还想要的两件事就是「它是什么元素」与「日期范围到哪天」
  • ⚠️ 星座的日期区间用的是通行惯例的固定日期,不是天文边界:太阳进入每个星座的准确时刻每年差几小时,落在边界两三天上的应当以星历表为准(结果里写明了这一点)
  • 带时间时给出十二时辰,并说明早子时 / 晚子时的那条差别
  • 当天是节气就标出节气;是节日就标出节日
  • 给出距离下一个春节还有多少天 —— 排日程时比农历日期本身更常用
  • 农历数据动态载入,别的页面不受影响
  • ⚠️ 农历算法钉在 28 个已知日期上(1980–2027 的春节、中秋、端午),对照表在测试里

使用方法

  1. 填公历日期(可带时间,如 2026-09-27 14:30)
  2. 右边立刻给出农历、干支、生肖、星座与节气
  3. 要反向换算,把「换算方向」改成农历 → 公历,输入 2026年八月十七
  4. 输入的若是闰月,写「闰二月」或勾上「闰月」

常见问题

为什么农历要用现成的库,不自己算?
因为农历不是一个公式。它是一份天文历表:哪个月是大月、哪一年有闰月,取决于朔(新月)与中气(太阳黄经是 30° 整数倍的那一刻)落在哪一天,而这两件事都要用高精度的天文级数去算。开发时试着自己实现过,但问题是没有可靠的参照:凭记忆写出来的系数一旦在某一年把闰月放错,页面上显示的仍是一个完全正常的农历日期 —— 不会报错,也不会看着奇怪。所以改用现成的库(MIT),并且把它钉在 28 个我独立知道答案的日期上:1980–2027 的 17 个春节、6 个中秋、5 个端午,全部一致。
闰月为什么要我自己指明?
因为数字写法本身分不出。`2026-08-17` 既可能是八月初七,也可能是闰八月初七,而两者的公历日期能差一个月。汉字写法里有「闰」字(闰二月),数字写法里没有位置放它,所以一律按非闰月读 —— 要闰月就写「闰二月」,或者把那个勾选框打开。与其猜一个(猜错的代价是一个月的日期差),不如要求写清楚。
子时为什么跨越午夜?23:30 到底算哪天?
时辰是把一天切成十二段、每段两小时,所以子时必然跨午夜(23:00–01:00),这是这套划分的固有性质。麻烦在于八字(四柱)里,23:00 之后的那一刻算作第二天的子时(晚子时),而 00:00–01:00 算当天的(早子时)。这个工具按钟表给时辰 —— 23:30 就是子时,日期仍是当天 —— 并把这条差别写在结果旁边。要排八字请按命理的那条规矩另算,两者不是一回事。
干支为什么与我在别处看到的不一样?
因为年与月的界线有不同说法。这个工具给的年干支按农历年(正月初一为界),而八字(四柱)用的是立春为界:立春之前出生的人,八字里的年干支还是上一年的。同理,月干支按节气划分,而农历的月按朔望划分,两者能差半个月。所以对照结果时先确认两边用的是哪条界线 —— 差一个字往往就是这个原因,不是算错了。

相关工具