年龄计算器

填出生日期和计算日期,一次拿到周岁、精确到年月日的年龄、已生活总天数、出生星期、下次生日倒计时和虚岁;2 月 29 日出生的人可以切换闰日口径。

示例值 1995-06-18,与正文「完整示例」和对照表一致。
想算到今天就点下面的「计算到今天」。
2 月 29 日出生者的闰日口径
精确年龄:31 岁 3 个月 13 天
周岁31 岁
精确年龄31 岁 3 个月 13 天
已生活11,428 天
出生星期星期日
距离下次生日260 天
虚岁(毛岁)32 岁
关键年龄节点(同样随上面的日期实时重算):
节点日期星期相对计算日期
满 6 周岁2001-06-18星期一已过 9,236 天
满 18 周岁2013-06-18星期二已过 4,853 天
满 60 周岁2055-06-18星期五还有 10,487 天

提示:日期框里按 Enter 可直接重算;两个日期框都是单行控件,不存在占用回车的场景。出生日按第 0 天计,次日才满 1 天,所以「已生活天数」比直觉少一天。

使用方法

  1. 在「出生日期」填 1995-06-18(示例值),范围 1900-01-01 到 2100-12-31。
  2. 在「计算日期」填 2026-10-01(示例值)。想算到今天直接点「计算到今天」。
  3. 出生日期若是闰年 2 月 29 日,用下方口径开关二选一:默认「顺延到 3 月 1 日」,另一档「提前到 2 月 28 日」,两档可能差 1 岁。
  4. 点「计算年龄」(或在任一日期框里按 Enter)。结果区给出精确年龄,卡片给出周岁、已生活天数、出生星期、下次生日倒计时和虚岁。
  5. 「关键年龄节点」表会同时列出满 6、18、60 周岁三天的日期与星期,方便核对入学与成年日期。

这个年龄计算器能解决什么问题

一是填表时把周岁算准。报名、投保、体检登记、签证申请表都要周岁,心算「今年年份减出生年份」在生日没到时会多算一岁,而这一岁有时直接决定能不能提交。

二是核对入学资格的那一天。绝大部分地区以当年 8 月 31 日为界,看孩子是否已满 6 周岁。差一天就要多等一整年,节点表里「满 6 周岁」那一行就是判断依据。

三是处理闰年 2 月 29 日这个历史遗留问题。非闰年没有这一天,不同国家与机构的满周岁日并不一致,本页把两种口径都做出来,方便你和办事机构对齐。

四是算清楚「活了多久」这类纪念性数字。已生活总天数是实打实的自然日累加,含掉所有闰日,用来做纪念日或写作素材时比「多少年」直观得多。

本页不做这些事:不把农历生日换算成公历(需要农历转换,请用「农历公历转换」);不按现行渐进式延迟退休规则精算法定退休日期(请用「退休日期计算器」);也不算星座、生肖和节气。想做纯天数差值请用「日期差值计算器」。

周岁怎么算:口径、闰日与时区处理

周岁的定义是「已经过完多少个公历生日」,不是年份相减。这个年龄计算器的做法是:先把两个日期换算成 UTC 零点的毫秒数,再用 anniversary(出生日, 年份, 口径) 求出某一年的周年日;若「出生年 + 年份差」对应的周年日还没到,就把年份差减 1。精确到月日的那部分,从这个周年日起逐月推进,每次加一个月并把日期夹在该月最后一天之内(避免 1 月 31 日加一个月变成 3 月 3 日),推不动为止,余下的就是天数。

为什么不能用 (计算日 − 出生日) ÷ 31536000000 取整。31536000000 就是 365 × 86400000,等价于「已活天数除以 365」,它把每个闰日都当成 0 天,误差逐年累积。默认示例 1995-06-18 到 2026-10-01 已活 11428 天,而 11428 = 31 × 365 + 8 + 105,多出的 8 天正是 1996、2000、2004、2008、2012、2016、2020、2024 这 8 个 2 月 29 日。误差攒够 365 天就会整整多算一岁:2000-01-05 出生、算到 2026-12-31,简单除法给出 27 岁,真实周岁是 26 岁;1996-03-01 出生、算到 2026-02-28,简单除法给出 30 岁,真实周岁是 29 岁。

闰年规则。公历闰年的判据是「能被 4 整除且不能被 100 整除,或者能被 400 整除」,所以 2000 年是闰年,1900 年与 2100 年都不是。这条规则决定了 2 月 29 日大约每 4 年出现一次,也决定了闰日口径只在这一天出生的人身上触发。

2 月 29 日出生者的满周岁日。我国公安系统沿用的《常住人口管理信息规范》(公技监〔2004〕3 号)明确:出生日期为闰年 2 月 29 日的,计算周岁时遇到非闰年以 3 月 1 日为满周岁,原文举的例子是 1992 年 2 月 29 日出生者满 26 周岁的日期为 2018 年 3 月 1 日。英国在《Family Law Reform Act 1969》与《Interpretation Act 1978》下同样把非闰年的生日落在 3 月 1 日;新西兰、香港、欧洲大陆多数国家和美国多数州则采用 2 月 28 日。两种口径都不是「谁算错了」,只是历法惯例不同,本页把它做成可切换开关。

虚岁与毛岁是同一件事。虚岁又称毛岁,是传统计龄方式:出生即算 1 岁,此后每逢农历新年(正月初一)长 1 岁,常用简化式是「计算年份 − 出生年份 + 1」。周岁从 0 岁起算、逢公历生日长 1 岁,两者因此会差 1 岁或 2 岁:公历生日已过时差 1 岁,生日未到而农历新年已过时差 2 岁。极端例子是除夕出生的人,出生当天虚岁 1,第二天就是大年初一变成 2 岁。本页虚岁按上面的简化式给出,不查农历,所以春节前后可能与按农历新年计虚岁的长辈差 1 岁。

时区陷阱。JavaScript 里 new Date('2000-01-01') 按 UTC 解析,而 new Date(2000, 0, 1) 按本机时区解析;再用 toISOString() 输出又会把日期挪一天。所以本页不直接用字符串构造 Date,而是自己拆出年、月、日,统一走 Date.UTC 生成时间戳,读取时一律用 getUTCFullYear / getUTCMonth / getUTCDate。这样 计算日 − 出生日 永远是 86400000 的整数倍,也不受夏令时影响——有些时区一年里有一天只有 23 小时,用本地时间做减法会少算一天。

完整示例(数值仅作演示)

示例条件与默认值一致:出生 1995-06-18、计算日 2026-10-01、闰日口径顺延到 3 月 1 日。实测结果:

三种口径与闰日口径对照表

同一组日期换不同口径分别算出多少,放在一张表里最容易看出差异。别处对不上时,先拿这张表定位差在哪栏:

口径出生 1995-06-18 / 计算 2026-10-01怎么来的
周岁(实足年龄)31 岁已过完的完整公历生日次数,2026 年那次生日已过
精确年龄31 岁 3 个月 13 天从最近一次周岁日起逐月推进后取余
虚岁(毛岁)32 岁2026 − 1995 + 1,出生即 1 岁
(计算日 − 出生日) ÷ 3153600000031 岁已活 11428 ÷ 365 取整;本例恰好不错,换一组日期就会错
已生活总天数11,428 天32 个自然日的累加,含 8 个闰日

出生日期落在 2 月 29 日时,「满周岁日」会随口径变化,逐日复算结果如下:

出生日期计算日期顺延到 3 月 1 日提前到 2 月 28 日
1992-02-292018-02-2825 岁26 岁
1992-02-292018-03-0126 岁26 岁
2000-02-292026-02-2825 岁26 岁
2000-02-292026-03-0126 岁26 岁
1992-02-292024-02-2831 岁31 岁
1992-02-292024-02-2932 岁32 岁

入学截止日期这一档同样可以逐日验证。《中华人民共和国义务教育法》要求「凡年满六周岁的儿童」应当入学,全国绝大部分地区以当年 8 月 31 日是否达到实足年龄为准,例如 2019-08-31 出生的孩子在 2025 年 8 月 31 日当天已满 6 周岁,可以当年入学;2019-09-01 出生的孩子当天尚未满 6 周岁,要顺延一年。部分学位有余量的地区会放宽到当年 12 月 31 日,具体以当地当年招生文件为准。

边界、法定口径与精度说明

常见问题

周岁和虚岁到底差几岁?

差 1 岁或 2 岁,取决于公历生日和农历新年哪个先到。从农历新年到公历生日这段区间里虚岁比周岁大 2 岁,从公历生日到下一个农历新年这段区间里大 1 岁。默认示例 1995-06-18 出生、2026-10-01 计算时,周岁 31 岁、虚岁 32 岁,差 1 岁。

2 月 29 日出生的人,非闰年哪天算满周岁?

看和哪个机构对齐。我国公安系统的《常住人口管理信息规范》与英国法都按 3 月 1 日:1992-02-29 出生者满 26 周岁日是 2018-03-01。新西兰、香港、欧洲大陆多数国家和美国多数州按 2 月 28 日,那样在 2018-02-28 就算满 26 周岁。本页两种口径都提供,默认按 3 月 1 日。

为什么用日期差除以 31536000000 会算错?

因为 31536000000 = 365 × 86400000,把每 4 年一次的闰日当成了 0 天,误差逐年累积,攒够 365 天就多算一岁。默认示例的 11428 天里有 8 天是 8 个 2 月 29 日;换一组日期就会露馅:2000-01-05 出生、算到 2026-12-31,除法给出 27 岁,真实周岁只有 26 岁。

生日当天算不算满周岁?

日常口径算:「过生日就长一岁」。但刑事口径不同,最高人民法院的司法解释规定刑法上的「周岁」从周岁生日的第二天起算,生日当天实施的行为仍按未满处理。本页给的是日常与民事口径,涉及刑责请按司法解释另算。

我在国外打开,结果会不一样吗?

不会。本页把输入的日期直接当成 UTC 零点处理,读值只用 getUTC* 系列方法,不读本机时区,跨时区、跨夏令时切换都得到同一结果。反过来说,如果你用控制台自己写 new Date('1995-06-18') 再相减,就可能因为时区被挪掉一天。

身份证上的出生日期是农历,能直接用吗?

不能直接填。我国户籍统一登记公历出生日期,身份证上若是农历日期,说明登记时就换算过;如果你手上只有农历生日,需要先用「农历公历转换」换成公历再填,否则周岁会整体偏移。

「满 6 周岁」和入学截止日期是同一件事吗?

不完全是。法律只写「凡年满六周岁」,具体截止日由省级教育部门确定,全国大部分地区以当年 8 月 31 日为界,学位有余量的地方可放宽到 12 月 31 日。节点表里那一行给的是孩子实际满 6 周岁的日期,和当地当年的截止日一比就知道能不能入学。

输入的生日会被上传或保存吗?

不会。两个日期只参与这个年龄计算器的毫秒减法与逐月推进,全程没有网络请求,也不写入浏览器存储;刷新页面后输入框会回到 1995-06-18 与 2026-10-01 这组示例。想自己确认,可以打开开发者工具的 Network 面板,改几次日期看有没有新请求发出。

相关工具