日干支就是把每一天按 60甲子循环 排列。计算思路是:先把公历日期换成一个连续日数,再对 60 取余。
下面给你一个常用、稳定的算法。
一、60甲子编号
把六十甲子从 0 开始编号:
| 编号 | 干支 |
|||
| 0 | 甲子 |
| 1 | 乙丑 |
| 2 | 丙寅 |
| 3 | 丁卯 |
| 4 | 戊辰 |
| ... | ... |
| 40 | 甲辰 |
| ... | ... |
| 59 | 癸亥 |
天干序号:
```text
0甲 1乙 2丙 3丁 4戊 5己 6庚 7辛 8壬 9癸
```
地支序号:
```text
0子 1丑 2寅 3卯 4辰 5巳 6午 7未 8申 9酉 10戌 11亥
```
二、公历日期转儒略日 JDN
设公历日期为:年 Y,月 M,日 D。
如果月份是 1月或2月,要把它看成上一年的 13月、14月:
```text
如果 M <= 2:
Y = Y - 1
M = M + 12
```
然后计算:
```text
A = floor(Y / 100)
B = 2 - A + floor(A / 4)
JDN = floor(365.25 × (Y + 4716))
+ floor(30.6001 × (M + 1))
+ D + B - 1524
```
三、计算日干支序号
公式:
```text
干支序号 = (JDN + 49) mod 60
```
然后:
```text
天干序号 = 干支序号 mod 10
地支序号 = 干支序号 mod 12
```
再查天干、地支表即可。
四、举例:计算 2024年2月10日 的日干支
因为 2月要当作上一年的 14月:
```text
Y = 2023
M = 14
D = 10
```
计算:
```text
A = floor(2023 / 100) = 20
B = 2 - 20 + floor(20 / 4) = -13
```
得到:
```text

JDN = 2460351
```
日干支序号:
```text
(2460351 + 49) mod 60 = 40
```
40 对应:
```text
天干序号 = 40 mod 10 = 0 = 甲
地支序号 = 40 mod 12 = 4 = 辰
```
所以:
```text
2024年2月10日 = 甲辰日
```
五、简化记法
核心公式可以记为:
```text
日干支序号 = (JDN + 49) mod 60
```
其中:
```text
0 = 甲子
1 = 乙丑
2 = 丙寅
...
59 = 癸亥
```
六、注意事项
如果只是查普通日历日期,按公历当天计算即可。
但如果用于八字排盘,要注意有些流派认为日柱在晚上 23点子时 就换日,而不是凌晨 0点。所以出生在晚上 23点到 24点之间的人,日柱可能会有不同排法。
