跳至内容

年龄计算器 — 精确年龄(年、月和天)

年龄计算器只需输入出生日期,即可精确算出以年、月、日表示的当前年龄,并同时给出已经历的总周数、总天数和总小时数。工具还会自动计算距离下一个生日还剩多少天,也可以指定任意目标日期计算当时的年龄。适合用于填写表格、核对法定年龄、规划生日庆祝或单纯满足好奇心,计算结果会自动考虑闰年,保证结果准确无误。

年龄计算器

精确年龄
36 岁 7 个月 26 天

你出生于 Monday

下一个生日: 还有 127 天 (即将年满 37 岁)

你的年龄(其他单位)

个月
439
周
1,912
天
13,387
小时
321,288
分钟
19,277,280
秒
1,156,636,800

生命进度

你的年龄相对于80年参考跨度的进度。

年龄可视化3636 / 80 岁080
加载计算器...
📚

文档

什么是年龄计算器?

年龄计算器用于求出两个日期之间的精确时间:出生日期和目标日期(通常是今天)。它以年、月、日的形式给出结果,同时也给出以周、天、小时、分钟和秒为单位的累计总数。也可以针对过去或未来的日期计算年龄,从而得知一个人在那一天已有或将有多大。

如何计算年龄

年龄是两个日历日期之间的间隔。描述这一间隔有两种正确方式,分别适用于不同用途。

按日历计算的年龄(年、月、日)

这是人们日常表达年龄的方式,例如“33岁4个月5天”。计算分为三步:

  1. 计算从出生日期起已经过去的完整年数。
  2. 从最近一次生日开始,计算已经过去的完整月数。
  3. 从该日期开始,计算剩余的天数。

第 3 步在接近月末时比较棘手,因为各个月份的天数并不相同。某人出生于一月 31 日,在三月 1 日计算年龄时,他是 1 个月又 1 天。一月 31 日之后的一个月是二月 28 日(闰年则是二月 29 日),因为二月没有 31 日。三月 1 日在其后一天。这种方法有时因推广它的 Python 库而被称为 relativedelta 规则,它会把周年日期限定在较短月份的最后一天,使天数永远不会变成负数。

总经过时间(天、小时、秒)

要精确计算经历的时间,需要先将两个日期转换为时间轴上的单一时点,再以完整天数计算差值:

天数 = floor((目标日期 − 出生日期) ÷ 86,400,000 毫秒)

相减前,两个日期都设为 UTC(协调世界时)午夜。这样可以避免夏令时变化增加或减少一小时,从而使天数计算出现偏差。根据天数总数,周数为天数除以7并向下取整。小时、分钟和秒数分别为天数乘以24、1,440和86,400。

将总天数除以365或365.25,可以得到近似的年龄(年),但这种方法不知道这段时间中哪些年份是闰年。上文所述的日历计算是准确的。回答“我多大了”时,应使用按日历计算的年龄。对于需要精确经过时间的任务,例如安排用药时间或倒计时至某个里程碑,则应使用总天数或总周数。

算例

某人出生于2000年1月1日,按2020年1月1日计算年龄:

项目数值
按日历计算的年龄20年0个月0天
总天数7,305
总周数1,043
出生日期是星期几星期六

总计 7,305 天等于 20 × 365 加上 5 个闰日,对应闰年 2000、2004、2008、2012 和 2016。这些年份各自多出一个二月 29 日,落在这 20 年的跨度之内。因此天数高于简单的 20 × 365,也因此手工计算很容易出现几天的误差。

代码中的年龄计算公式

上述按日历计算年龄的方法可以在大多数编程语言中实现。使用内置的日期库,比手动编写闰年和月份天数规则更安全。

1from dateutil.relativedelta import relativedelta
2from datetime import date
3
4birth, target = date(2000, 1, 1), date(2020, 1, 1)
5
6age = relativedelta(target, birth)     # calendar age
7print(f"{age.years}y {age.months}m {age.days}d")
8
9total_days = (target - birth).days     # total elapsed days
10print(total_days)                      # 7305
11

Microsoft 不建议使用 DATEDIF 的“MD”单位。它可能返回负数、零或不准确的结果。

常见问题

如何查找我的准确年龄? 输入出生日期,并将目标日期保留为今天。结果会显示以年、月、日表示的年龄,以及按总天数、周数、小时数和秒数表示的相同年龄。

为什么两个年龄计算器会给出不同答案? 差异通常在于如何计算月份边界附近的剩余天数。如上所述,在月末将日期调整到较短月份的计算器,可能会与直接将经过的时间除以30的计算器相差一两天。

计算会考虑闰年吗? 会。总天数包含两个日期之间出现的每一个 2 月 29 日,出生日期为 2 月 29 日的人,在非闰年按 2 月 28 日计算。

可以计算过去或未来日期的年龄吗? 可以。将目标日期设为未来日期,会显示某人在那一天将有多大。设为过去日期,则显示他当时有多大。

时区会影响结果吗? 不会。计算天数前,两个日期都会转换为 UTC 午夜,因此无论用户所在位置或夏令时变化如何,总数都保持不变。

为什么天数总数与用365.25除天数所得的结果不同? 365.25只是平均年份长度;它不会记录这段时间中具体哪些年份是有366天的闰年。计算两个实际日历日期之间的完整天数是准确的。

参考文献

  1. dateutil 项目。relativedelta。dateutil relativedelta 文档 — 当加上的月份会超出较短月份的月末时,使用该月的最后一天。
  2. MDN Web Docs(Mozilla)。Date。MDN Date 参考 — JavaScript 日期是自 UTC 1970年1月1日 起的毫秒计数;±8.64 × 10¹⁵ 毫秒等于 ±100,000,000 天,因此一天为 86,400,000 毫秒。
  3. U.S. Naval Observatory(美国海军天文台)。Leap Years。USNO 闰年常见问题 — 能被 4 整除的年份是闰年,但不能被 400 整除的世纪年除外;2000 年是闰年。
  4. Microsoft。DATEDIF function。Microsoft 支持:DATEDIF — “Y”“YM”和“MD”单位,以及“MD”的已知局限。