「你多大了」这个问题在法律、医疗、入学报名里的答案往往不是同一个数。差别来自两套并行的算法:周岁按生日算,虚岁按农历新年算。搞清楚规则,才能解释为什么家里老人说的年龄和你身份证上的差两岁。
周岁的规则只有一句话 —— 每过一个生日加一岁,出生时是 0 岁。
所以今天的周岁 = 今天减出生日期,拆成「X 岁 Y 个月 Z 天」。拆的时候有个固定顺序:先扣掉整年,再在剩下的零头里扣整月,最后剩下的天数就是 Z。
举个例子,1990-06-15 出生的人:
| 今天 | 周岁拆解 | 说明 |
|---|---|---|
| 2026-06-15 | 36 岁 0 个月 0 天 | 正好过完第 36 个生日 |
| 2026-06-14 | 35 岁 11 个月 30 天 | 差一天满 36 |
| 2026-10-07 | 36 岁 3 个月 22 天 | 6-15 → 10-07 |
第二行最反直觉:差一天满 36 岁,很多人会写成「11 个月 31 天」或者干脆说「还差 1 天」。实际是 30 天,因为整月那一步停在 2026-05-15,从 5-15 数到 6-14 是 30 天(5 月有 31 天,15→31 是 16 天,再加 6 月的 14 天)。
月末出生的人要特别注意。 1 月 31 日出生的人,「加一个月」在日历上会溢出到 3 月 3 日左右(取决于 2 月的天数)。这不是算错,而是「一个月」本来就不是固定天数。不同工具在这里的处理可能差好几天,跨工具对数字前先确认口径。
虚岁的规则是 出生时算 1 岁,每过一个农历新年加 1 岁。注意是农历新年,不是公历 1 月 1 日。
简化算法是 当前年份 − 出生年份 + 1。这个式子对大多数人是对的,但有两个已知偏差:
所以虚岁更适合当民俗说法,办手续一律以周岁为准。法律上的「年满 18 周岁」「法定退休年龄」全部指周岁。
这是个真问题:2 月 29 日每四年才出现一次。
常见做法有两种:
Date 的默认行为)本工具用的是第 2 种 —— 因为它是 JavaScript Date 的既有语义,非闰年写 2 月 29 日 会自动变成 3 月 1 日。如果你所在地按 2 月 28 日计,倒计时的日期会差一天。
星座按公历日期查,但分界点不是每月 1 日。完整的分界是:
| 星座 | 起 | 止 |
|---|---|---|
| 水瓶座 | 1-20 | 2-18 |
| 双鱼座 | 2-19 | 3-20 |
| 白羊座 | 3-21 | 4-19 |
| 金牛座 | 4-20 | 5-20 |
| 双子座 | 5-21 | 6-21 |
| 巨蟹座 | 6-22 | 7-22 |
| 狮子座 | 7-23 | 8-22 |
| 处女座 | 8-23 | 9-22 |
| 天秤座 | 9-23 | 10-23 |
| 天蝎座 | 10-24 | 11-22 |
| 射手座 | 11-23 | 12-21 |
| 摩羯座 | 12-22 | 1-19 |
摩羯座是唯一跨年的一条,从 12 月 22 日一直到次年 1 月 19 日。
另外要说明:星座依据的是太阳在黄道上的实际位置,每年会有一两天的漂移(还和出生年份、出生地点、出生时刻有关)。上表是常用的固定日期近似,分界点当天出生的人(比如 3 月 21 日)严格来说要查当年的星历表才能确定。
这是最容易搞错的一条。生肖跟随农历年,分界是农历新年(春节),不是公历 1 月 1 日。
2026 年春节是 2 月 17 日,所以:
本工具用的是 年份 % 12 的简化算法,也就是按公历年取生肖。对春节之后出生的人结果正确;1 月 1 日到春节期间出生的人会差一年。如果你正好生在这个区间,请以农历为准。
还有更细的一种说法按立春分界(命理常用),那又和春节差几天到十几天。
倒计时有两种口径:
本工具用第二种。填了出生时间 08:30 的话,倒计时就走到生日那天 08:30。这样「已生活多少秒」和「还有多少秒到生日」两个数字能对得上,不会出现在生日当天看到还剩 8 小时的怪现象。
周岁和虚岁差多少岁? 通常 1 到 2 岁。虚岁最大比周岁大 2 岁(农历年末出生、且还没过农历新年的时候),最小大 1 岁。
「已生活 X 天」包含今天吗? 包含到当前这一秒。它是两个时刻的毫秒差整除换算,不是日历天数,所以不受「算头不算尾」的影响。
心跳次数、呼吸次数这些数字准吗? 是估算。按每分钟 72 次心跳、每分钟 16 次呼吸、每天 8 小时睡眠乘以实际经历的时间。个体差异很大,当个数量级参考就好。
生命进度按什么算? 按你填的预期寿命折算,一年取 365.25 天(把闰年摊平)。默认 80 岁,可以改。活过预期寿命不会超过 100%,会停在 100%。