年龄问题是把日期差值问题的一端钉在出生日期上:不再问两个自由日期相隔多远,而是问从出生日到当前这一刻经历了多少。年龄计算器从单一出生日期输入回答它:输出生日期,按计算,结果行先读年、月、日的拆分,再读合计天数(周、小时),最后是距下次生日的倒计时。本文例子里,1990 年 1 月 15 日出生的人,到 2026 年 9 月 18 日读作 36 岁 8 个月 3 天,合计 13395 天,距 2027 年 1 月 15 日的下次生日还有 119 天。
文章按以下顺序展开:年、月、日三段拆分与月日借位规则;总天数、总周数、总小时的线性计数;距下次生日的倒计时;2 月 29 日生日的进位与本地午夜解析;年龄作为其他计算器输入的位置;把出生日期带入代码。
三段拆分与借位规则
年龄按日历单位读,不把天数除以平均值。年取年份差,月取月份差,日取日期差;日为负时,月降 1,日补上当前月之前那个月的长度。把读数从 9 月 18 日换成 2026 年 9 月 3 日,日期差是 3 减 15 得负 12,月从 8 降到 7,日加上 8 月的 31 天变成 19:36 岁 7 个月 19 天。同一个人 9 月 18 日是 36 岁 8 个月 3 天,9 月 3 日是 36 岁 7 个月 19 天,相差正好 15 天。
总天数、总周数、总小时:线性计数
拆分之下,结果行把同一段跨度作为纯计数给出。从 1990 年 1 月 15 日到 2026 年 9 月 18 日是 13395 天;周数由天数除以 7 向下取整,得 1913 周;小时数是天数乘 24,得 321480 小时,是从天数推导的整数倍,不是从时钟量出来的。这个精确天数正是日期计算器差值模式在任意两个日期之间报告的数字,日期差值文章把那个模式从头到尾走一遍。
距下次生日的倒计时
第三行找今天之后生日的月与日下一次出现,并数出到那天的天数。从 2026 年 9 月 18 日起,下一个 1 月 15 日隔 119 天:9 月剩 12 天、10 月 31 天、11 月 30 天、12 月 31 天、再进 1 月 15 天。这个落点日期就是未来日期文章覆盖的将来日期问题,只是以生日为目标、以剩余天数为跨度。倒计时在生日当天从一整年重新开始,约 365 天,因为判定把生日一到就算作已过。出生日在未来则被一行错误拒绝,而不是给出负年龄。
2 月 29 日与本地午夜解析
闰日生日带着月数学的进位规则:非闰年没有 2 月 29 日,所以下次生日落在 3 月 1 日,2000 年 2 月 29 日出生的人在 2027 年过 3 月 1 日,到 2028 年回到 2 月 29 日。日期差数学还依赖出生日按本地午夜而不是 UTC 午夜读入,因为 UTC 解析在 UTC 以西的每个时区都会早读一天,破坏上面展示的日借位。
年龄作为输入的位置
年龄数字是若干其他计算器的入场券。退休规划器默认取当前年龄 30、退休年龄 65,在中间的在职年份上排缴费计划。财务自由计算器从同一个当前年龄出发,报告余额不再需要收入的年龄。贷款加上这条模式的远端:1990 年 1 月 15 日出生、2026 年 1 月 15 日满 36 岁的人取 30 年期限,2056 年 1 月 15 日 66 岁结清,贷款计算器把它带进还款计划。
把出生日期带入代码
出生日期要进代码、服务器或要秒数的表单时,Unix 时间戳转换器把它改写成自纪元起的单一整数秒数,时区选择写明。年龄本身一路都是差值问题:一端钉在出生日,另一端在问题所问之处。