使用方法
- 在「出生日期」填 1995-06-18(示例值),范围 1900-01-01 到 2100-12-31。
- 在「计算日期」填 2026-10-01(示例值)。想算到今天直接点「计算到今天」。
- 出生日期若是闰年 2 月 29 日,用下方口径开关二选一:默认「顺延到 3 月 1 日」,另一档「提前到 2 月 28 日」,两档可能差 1 岁。
- 点「计算年龄」(或在任一日期框里按 Enter)。结果区给出精确年龄,卡片给出周岁、已生活天数、出生星期、下次生日倒计时和虚岁。
- 「关键年龄节点」表会同时列出满 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 日。实测结果:
- 周岁 31 岁。2026-06-18 已过,所以 2026 − 1995 = 31;把计算日改成 2026-06-17,周岁就回落成 30 岁。
- 精确年龄 31 岁 3 个月 13 天。从 2026-06-18 逐月加到 2026-09-18 是 3 个月,再余到 10-01 是 13 天。
- 已生活 11,428 天,且 11428 = 31 × 365(11315)+ 8 个闰日 + 最近一次生日以来的 105 天,三部分相加正好对账。
- 出生星期 星期日;距离下次生日 260 天,下一次生日是 2027-06-18。
- 虚岁 32 岁(2026 − 1995 + 1),比周岁大 1 岁。
- 关键节点:满 6 周岁 2001-06-18(星期一),满 18 周岁 2013-06-18(星期二),满 60 周岁 2055-06-18(星期五)。
三种口径与闰日口径对照表
同一组日期换不同口径分别算出多少,放在一张表里最容易看出差异。别处对不上时,先拿这张表定位差在哪栏:
| 口径 | 出生 1995-06-18 / 计算 2026-10-01 | 怎么来的 |
|---|---|---|
| 周岁(实足年龄) | 31 岁 | 已过完的完整公历生日次数,2026 年那次生日已过 |
| 精确年龄 | 31 岁 3 个月 13 天 | 从最近一次周岁日起逐月推进后取余 |
| 虚岁(毛岁) | 32 岁 | 2026 − 1995 + 1,出生即 1 岁 |
| (计算日 − 出生日) ÷ 31536000000 | 31 岁 | 已活 11428 ÷ 365 取整;本例恰好不错,换一组日期就会错 |
| 已生活总天数 | 11,428 天 | 32 个自然日的累加,含 8 个闰日 |
出生日期落在 2 月 29 日时,「满周岁日」会随口径变化,逐日复算结果如下:
| 出生日期 | 计算日期 | 顺延到 3 月 1 日 | 提前到 2 月 28 日 |
|---|---|---|---|
| 1992-02-29 | 2018-02-28 | 25 岁 | 26 岁 |
| 1992-02-29 | 2018-03-01 | 26 岁 | 26 岁 |
| 2000-02-29 | 2026-02-28 | 25 岁 | 26 岁 |
| 2000-02-29 | 2026-03-01 | 26 岁 | 26 岁 |
| 1992-02-29 | 2024-02-28 | 31 岁 | 31 岁 |
| 1992-02-29 | 2024-02-29 | 32 岁 | 32 岁 |
入学截止日期这一档同样可以逐日验证。《中华人民共和国义务教育法》要求「凡年满六周岁的儿童」应当入学,全国绝大部分地区以当年 8 月 31 日是否达到实足年龄为准,例如 2019-08-31 出生的孩子在 2025 年 8 月 31 日当天已满 6 周岁,可以当年入学;2019-09-01 出生的孩子当天尚未满 6 周岁,要顺延一年。部分学位有余量的地区会放宽到当年 12 月 31 日,具体以当地当年招生文件为准。
边界、法定口径与精度说明
- 日期范围 1900-01-01 至 2100-12-31,两个输入框都有
min与max;超出会直接提示,不会静默算出一个奇怪结果。 - 出生日期不能晚于计算日期。填反了会明确报错,而不是给出负数年龄。
- 出生当天按第 0 天计。1995-06-18 到 1995-06-19 是 1 天,所以「已生活总天数」比把出生当天也算进去的算法少 1 天,本页统一采用前者。
- 闰日口径只影响 2 月 29 日出生的人。其他出生日期下两个开关结果完全一致,不会因为口径不同而漂移。
- 虚岁不查农历。本页虚岁用的是「计算年份 − 出生年份 + 1」的简化式,不做农历新年换算,春节前后可能与按农历计虚岁的口径差 1 岁。要严格按农历算,需先做农历公历转换。
- 生日当天是否算满周岁,法律上分两种口径。日常与民事口径按「生日当天满周岁」;而《最高人民法院关于审理未成年人刑事案件具体应用法律若干问题的解释》第二条规定,刑法意义上的「周岁」按公历年月日计算、从周岁生日的第二天起算。涉及刑事责任年龄时请以该司法解释为准。
- 全部计算按 UTC 零点的整天进行,不涉及具体出生时刻、闰秒和夏令时,所以同一组日期在任何时区打开都得到同一个结果。
- 这份结果不能直接当办事依据。入学、退休、婚姻登记、驾驶资格等场景以主管机构规定和证件登记日期为准。尤其是退休,自 2025 年 1 月 1 日起施行渐进式延迟法定退休年龄:男职工由 60 周岁延至 63 周岁,原 55 周岁的女职工延至 58 周岁(两者均每 4 个月延迟 1 个月),原 50 周岁的女职工延至 55 周岁(每 2 个月延迟 1 个月),用 15 年完成;最低缴费年限自 2030 年起由 15 年逐步提高到 20 年,每年提高 6 个月。具体到个人的退休年月,请用「退休日期计算器」按官方附表核算。
常见问题
周岁和虚岁到底差几岁?
差 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 面板,改几次日期看有没有新请求发出。