跳到主要内容
CalcMax

日期间隔年数计算器

结果

36

年

个月
8
天
18 天
总月数
440
总天数
13,410 天
按年计(小数)
36.72

两个日期之间相隔几年?这个日期间隔年数计算器先给出日历意义上的差值——几年、几个月、剩下几天——再把同一段间隔用另外两种方式报出来:总共多少个月,以及折合成小数年。最后这两个不是同一个数的两种写法。整年按日历走,满一年要走到次年同一个日号;小数年则把总天数除以 365.2425,那是公历一年的平均长度(400 年恰好 146097 天,闰 97 次)。差一天不到一年,按日历是 0 年、按除法是 1.00 年,两种读法都对。

公式

整年整月整日 = 两个日期之间的日历差;总月数 = 年 × 12 + 月;小数年 = 总天数 ÷ 365.2425

startDate
两个日期中较早的那个,不过顺序不影响任何一个结果
endDate
较晚的那个日期;两者对调得到完全相同的六个数
years
日历意义上的整年——满一年走到对应的那一天,所以 2 月 29 日到次年 2 月 28 日算一年
months
扣掉整年之后剩下的整月数,取值永远是 0 到 11
days
扣掉整年和整月之后剩下的天数
totalMonths
整段间隔按月计数:36 年 8 个月读作 440 个月
decimalYears
总天数除以 365.2425——与整年是不同的口径,不是整年四舍五入来的

凡是期限以年为单位报出来的场合都用得上:工龄、房龄、公司成立多久、两个人相差几岁。日历差是最实在的那个答案,因为它是人掰着手指头数出来的结果。另外两个读数回答的是日历差回答不了的问题:总月数是按月和按年结算时的单位,小数年是算比率或平均数时的单位——36.72 年可以拿去相除,36 年 8 个月不行。它给不出小数月,也不会提醒你两个日期是不是填反了,因为两种顺序给出的数字完全一样。

算例

  1. 1990 年 1 月 1 日到 2026 年 9 月 19 日

    1. 三十六个整年走到 2026 年 1 月 1 日
    2. 再走八个整月到 2026 年 9 月 1 日,剩下 18 天
    3. 所以日历差是 36 年 8 个月 18 天
    4. 36 × 12 + 8 = 440 个月,同一段间隔换成单一单位来写
    5. 13410 天除以 365.2425 得到 36.72 个小数年

    同一段间隔的三种读法。日历差是你嘴上会说的那个;另外两个是要拿去做算术时才用的。

  2. 2000 年 1 月 1 日到 12 月 31 日——差一天不到一年

    1. 从 2000 年 1 月 1 日开启的这一年,要到 2001 年 1 月 1 日才闭合
    2. 所以整年数是 0,这段间隔是 11 个月零 30 天
    3. 只按月算是 11——第十二个月还没走完
    4. 天数是 365,2000 年虽然是闰年,但 1 月 1 日到 12 月 31 日走的是其中的平年部分
    5. 365 除以 365.2425 是 0.99934,保留两位小数就是 1.00

    就是这个例子让这一页非存在不可。日历说 0 年,除法说 1.00 年,只报其中一个的话,总有一半读者觉得这个工具算错了。

  3. 2024 年 2 月 29 日到 2025 年 2 月 28 日——闰日的周年

    1. 2025 年没有 2 月 29 日,所以周年日夹取到 2 月 28 日
    2. 于是这段间隔正好是 1 年 0 个月 0 天
    3. 12 个月,365 天,因为 2025 年不是闰年
    4. 365 除以 365.2425 舍入后是 1.00,三个读数在这里一致

    「加一年」是日历运算,「过了多少天」是普通减法。这是两者恰好一致的情形——上一个例子则是它们不一致的情形。

  4. 2026 年 1 月 31 日到 3 月 1 日——中间隔着一个短月

    1. 从 1 月 31 日往后一个整月落在 2 月 28 日,因为 2026 年 2 月只有 28 天
    2. 3 月 1 日在这之后一天,所以零头是 1 天而不是 -30
    3. 总月数是 1,天数是 29
    4. 29 天对 365.2425 天的平均年长,折合 0.08 个小数年

    拿日号直接相减会得到 1 减 31,符号和大小都错。必须先把整月扣出去,再数剩下的天。

局限

日历差与小数年回答的是两个不同的问题,没有任何一页能把它们合成一个数:2000 年 1 月 1 日到 12 月 31 日,同时是 0 个整年和 1.00 个小数年。整月按日历月走满来数,不是拿天数除以平均月长,所以一个月可能是 28 到 31 天,同样的天数跨过不同的月份会得到不同的月数。两个日期谁先谁后对六个数都没有影响——这一页报的是间隔的大小,不是带方向的距离,所以你要的是反向的话,符号得自己记着。日期按格里高利历前推计算,范围是公元 1 年到 9999 年,1582 年以前不做历法改革;整个算法里没有时区,也没有时刻:相差一天的两个日期永远就差一天,与你在哪个时区读它无关。

常见问题

1990 年 1 月 1 日到 2026 年 9 月 19 日相差几年?
36 年 8 个月 18 天。只按月算是 440 个月,只按天算是 13410 天。把这些天除以公历年的平均长度 365.2425 天,得到 36.72 个小数年——那就是把日历差三个数压成一个数的写法。
小数年怎么算?为什么会出现 0 年却有 1.00 个小数年?
因为这两个数用的是不同口径。整年按日历走,从 1 月 1 日开启的一年要到次年 1 月 1 日才闭合,所以 2000 年 1 月 1 日到 12 月 31 日是 0 年 11 个月 30 天。小数年则拿 365 天除以 365.2425,得 0.99934,保留两位就是 1.00。两个都不算错:日历那个说还差一天,除法那个如实反映了差得到底有多小。
折算成月一共是多少个月?
把年数乘以 12 再加上零头月数。1990 年到 2026 年就是 36 × 12 + 8 = 440 个月。按月结算、按月亮相、按月复盘的场合,月才是对的单位;而且月数比「几年几个月」更好比大小——两段看起来差不多的间隔,按月写出来可能差好几个月。
两个日期谁填在前面有影响吗?
没有。这一页报的是两个日期之间间隔的大小,而间隔的大小与你从哪一头读起无关——1990 到 2026 和 2026 到 1990 都是 36 年 8 个月 18 天。这也意味着任何一个数都不会是负数:如果你需要一个方向,你输入的顺序就是唯一的记录。
工龄怎么算?两个人的生日之间差多少年?
把两个生日填进去,读日历差,那就是年龄差几年几个月几天。有一点要留意:如果其中一个生日是 2 月 29 日,平年的周年日会落在 2 月 28 日,所以 2024 年 2 月 29 日到 2025 年 2 月 28 日正好算一年,而不是差一天不到一年。

参考资料

相关计算器