日期间隔年数计算器
结果
年
- 个月
- 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 个月不行。它给不出小数月,也不会提醒你两个日期是不是填反了,因为两种顺序给出的数字完全一样。
算例
1990 年 1 月 1 日到 2026 年 9 月 19 日
- 三十六个整年走到 2026 年 1 月 1 日
- 再走八个整月到 2026 年 9 月 1 日,剩下 18 天
- 所以日历差是 36 年 8 个月 18 天
- 36 × 12 + 8 = 440 个月,同一段间隔换成单一单位来写
- 13410 天除以 365.2425 得到 36.72 个小数年
同一段间隔的三种读法。日历差是你嘴上会说的那个;另外两个是要拿去做算术时才用的。
2000 年 1 月 1 日到 12 月 31 日——差一天不到一年
- 从 2000 年 1 月 1 日开启的这一年,要到 2001 年 1 月 1 日才闭合
- 所以整年数是 0,这段间隔是 11 个月零 30 天
- 只按月算是 11——第十二个月还没走完
- 天数是 365,2000 年虽然是闰年,但 1 月 1 日到 12 月 31 日走的是其中的平年部分
- 365 除以 365.2425 是 0.99934,保留两位小数就是 1.00
就是这个例子让这一页非存在不可。日历说 0 年,除法说 1.00 年,只报其中一个的话,总有一半读者觉得这个工具算错了。
2024 年 2 月 29 日到 2025 年 2 月 28 日——闰日的周年
- 2025 年没有 2 月 29 日,所以周年日夹取到 2 月 28 日
- 于是这段间隔正好是 1 年 0 个月 0 天
- 12 个月,365 天,因为 2025 年不是闰年
- 365 除以 365.2425 舍入后是 1.00,三个读数在这里一致
「加一年」是日历运算,「过了多少天」是普通减法。这是两者恰好一致的情形——上一个例子则是它们不一致的情形。
2026 年 1 月 31 日到 3 月 1 日——中间隔着一个短月
- 从 1 月 31 日往后一个整月落在 2 月 28 日,因为 2026 年 2 月只有 28 天
- 3 月 1 日在这之后一天,所以零头是 1 天而不是 -30
- 总月数是 1,天数是 29
- 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 日正好算一年,而不是差一天不到一年。
参考资料
- “闰年”是怎么来的? — 中国科学院西安分院
- 才 28 号,怎么就月末了? — 科普中国(中国科学院紫金山天文台)