年龄按月计算器

输入出生日期与截至日期,立刻得到满几个月、折合成几年几个月、一共多少天、折成几周余几天。整月按日对日判定,差一天就向下取整;天数用 UTC 毫秒差,不受夏令时影响。

360 个月(30 年 0 个月) / 10957 天 / 1565 周余 2 天
出生日期 1996-10-11,截至日期 2026-10-11 整月数:360 个月 = 30 年 0 个月 总天数:10957 天 整周数:1565 周余 2 天 不足整月的天数:0 天

默认示例:出生 1996-10-11、截至 2026-10-11。任一日期改动即重新计算,不必点按钮。

使用方法

  1. 「出生日期」默认是 1996-10-11,点开日历改成你要算的那个生日,允许范围是 1900-01-01 到 2099-12-31,超出会给出提示。
  2. 「截至日期」默认是 2026-10-11。算婴儿月龄填今天或体检当天;算司龄填合同截止日或核算日。
  3. 两个日期里任意一个改动,结果立刻重算;光标停在日期框里按回车同样触发一次计算。
  4. 结果区给出三组数:整月数与它折算成的「几年几个月」、总天数、整周数与余下天数,下方配一行判定说明,写清有没有因日对日不满而向下取整。
  5. 结果区下面是「整月里程碑」表,列出从出生日算起满 0 到 11 个月各自落在哪一天、距出生多少天、是否已到达截至日;默认展开 6 行,点「加载更多」看满 12 行。
  6. 「复制结果」复制整段结论;「导出 CSV」把里程碑表存成带字节序标记的表格;「复制对照表」复制正文那张 12 行对照表。
  7. 截至日期早于出生日期时提示「截至日期不能早于出生日期」,不返回负数,也不取绝对值。
  8. 要别的口径就换工具:只想知道周岁,走年龄计算器;只想知道一共多少天,走年龄天数计算器。

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

满月、周岁、月龄这三件事在很多场景里是三套口径,混起来就要出错。婴儿的疫苗接种表按月龄排,相邻两剂往往只差一个月;儿科体检报告上的生长曲线横轴也是月龄;劳动合同里的司龄、见习期、试用期常写成「满 X 个月」。这些场合要的是「满几个月」这个整数,不是「大约多少个 30 天」。

用总天数除以 30 来估月龄是最常见的错法。同一个区间,拿 30 天折算出来的月数一定比真实整月数大,误差来自每个月长度不等与闰年多出的那一天;区间越长,累计出来的偏离越明显。要一个整数,得按日历逐月走一遍。

另一类需求是「截至某个未来日期时满几个月」。保险合同按整月计费、租房合同的租金结算日、公积金连续缴存的月数认定,都要求先算出准确的整月数再乘单价。差一个整月就是一整笔钱,而且这类差异往往在最后一个月才暴露。

本页与站内相邻工具的分工很清楚:只关心周岁,用年龄计算器;只关心一共多少天,用年龄天数计算器;要算两个任意日期之间隔了多久,用日期差值计算器。本页只回答「满几个月」这一个整数,并把它拆到年与月两层。

这个工具在本站也叫年龄月计算器。名字里少了「按」字,容易被读成「按年份算年龄」,实际做的是按整月计数。

计算原理与变量说明

把两个日期变成「几个月」,看着只是一次减法,实际操作里有四个变量:年份差、月份差、两个日的大小关系,以及天数要不要按 UTC 算。下面逐步拆开。

第一步,算整年与整月。整年 = 截至年 − 出生年,整月 = 截至月 − 出生月。这一步只动年月,与每月有多少天无关。

第二步,日对日校正。如果 截至日 < 出生日,说明最后一个月份还没走满,整月减 1。出生 1 月 15 日、截至 3 月 14 日,月份差是 2,但 14 小于 15,最后一个月差 1 天没满,整月落到 1。

第三步,负数借位。整月被减成负数时,整月加 12、整年减 1。跨年的短间隔常走到这一步:出生 2025-11-20、截至 2026-01-10,整年 = 1、整月 = 1 − 11 = −10,日 10 < 20 再减 1 得 −11,借位后整月 = 1、整年 = 0,结果是 1 个整月。

第四步,折算总月数。总月数 = 整年 × 12 + 整月。整月取值落在 0 到 11,所以「几年几个月」这个写法是唯一的。

第五步,总天数按 UTC 毫秒差。总天数 = round((截至UTC毫秒 − 出生UTC毫秒) ÷ 86400000)。两个日期都用 Date.UTC(年, 月 − 1, 日) 构造成 UTC 零点,相减得到整数毫秒差,除以 86400000 后四舍五入。

第六步,整周与余天。整周数 = floor(总天数 ÷ 7),余天 = 总天数 mod 7。周数向下取整,余天恒在 0 到 6。

整月的判定是日对日,不是月份差。1 月 15 日到 3 月 14 日是 1 个整月还差 1 天,必须向下取整;按月份差算会得出 2,疫苗 schedule 与司龄认定会跟着错一格,而且这种错在月末与月初交界处最集中。

月末没有对应日期时按该月最后一天算。1 月 31 日往后推一个月落在 2 月,2 月没有 31 日,行业惯例按 2 月 28 日(闰年 29 日)判定为本月末,所以到 2 月 28 日仍是 0 个整月余 28 天,到 3 月 1 日才算满 1 个整月。

天数必须按 UTC 毫秒差算,不能把两个 Date 对象直接相减。切进夏令时的那天只有 23 小时、切回来那天有 25 小时,跨越这两天的区间直接相减再取整会差出一天;日期固定在 UTC 零点上就没有这个偏移。

闰年 2 月 29 日出生这一天的判定有歧义。法律与合同约定里通常按 2 月 28 日或 3 月 1 日处理。本页按纯日历算:2024-02-29 到 2025-02-28 是 11 个整月,到 2025-03-01 才是 12 个整月;若合同另有约定,以约定为准。

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

默认示例是出生 1996-10-11、截至 2026-10-11。整年 = 2026 − 1996 = 30,整月 = 10 − 10 = 0;截至日 11 不小于出生日 11,不用减 1,也不用借位。总月数 = 30 × 12 + 0 = 360 个月,即 30 年 0 个月。总天数 = 10957 天,折成 1565 周余 2 天。

把截至日期往后挪一天到 2026-10-12:整月仍是 0,整月数不变,总天数涨到 10958 天。总天数与整月数是两套口径,会各自独立变化。

把截至日期提前一天到 2026-10-10:截至日 10 小于出生日 11,整月被减成 −1,借位后整月 = 11、整年 = 29,总月数 = 29 × 12 + 11 = 359 个月,总天数 = 10956 天。

把出生日期改成 2026-01-11、截至日期不动:整年 = 0,整月 = 10 − 1 = 9,日相等不减不借位,总月数 = 9 个月,总天数 = 273 天,与正文对照表第二行一致;改成 2026-09-11 得到 1 个月、30 天,对应第一行。

月末边界:出生 2026-01-31、截至 2026-02-28,整月 = 2 − 1 = 1,但 28 < 31,整月减成 0,结果是 0 个整月余 28 天;截至改成 2026-03-01,整月 = 3 − 1 = 2,1 < 31 再减成 1,得到 1 个整月。同一对日期只差一天,整月数从 0 跳到 1。

出生日期与整月数对照表

下表把截至日期固定为 2026-10-11,只改出生日期。整月数由整年与整月两段合成,总天数按 UTC 毫秒差算出,两列口径不同,数值不会成固定比例。

出生日期整月数折合总天数
2026-09-1110 年 1 个月30
2026-01-1190 年 9 个月273
2025-10-11121 年 0 个月365
2024-10-11242 年 0 个月730
2020-10-11726 年 0 个月2191
2016-10-1112010 年 0 个月3652
2011-10-1118015 年 0 个月5479
2006-10-1124020 年 0 个月7305
2001-10-1130025 年 0 个月9131
1996-10-1136030 年 0 个月10957
1991-10-1142035 年 0 个月12784
1981-10-1154045 年 0 个月16436

读这张表先看整月数那一列:出生日期每往前推一年,整月数增加 12。这个规律只在「日对日刚好走满」时成立,也就是出生日与截至日相同的情况,表里 12 行全部满足。

再看总天数那一列:跨过闰年的那一段是 366 天,没跨过的是 365 天。整月数按 12 递增,总天数不会,这是两套口径必须分开读的原因。

结果边界、舍入与适用说明

常见问题

1 月 31 日出生,到 2 月 28 日为什么是 0 个整月?

整月按日对日判定:截至日 28 小于出生日 31,最后一个月没走满,整月减 1 后落到 0。2 月没有 31 日,行业惯例按该月最后一天(2 月 28 日,闰年 29 日)判定为本月末,所以要到 3 月 1 日才算满 1 个整月。

1 月 15 日到 3 月 14 日,月份差是 2,为什么只算 1 个整月?

日对日口径要求截至日不小于出生日才算走满最后一个月。14 小于 15,差 1 天没满,整月从 2 减到 1。疫苗 schedule 与司龄认定都用这个口径;按月份差算会提前一个月放行。

闰年 2 月 29 日出生,第二年没有这一天怎么办?

按纯日历算,2024-02-29 到 2025-02-28 是 11 个整月(截至日 28 小于出生日 29),到 2025-03-01 才是 12 个整月。法律与合同约定里通常按 2 月 28 日或 3 月 1 日处理,若合同另有约定,以约定为准。

总天数为什么要用 UTC 毫秒差,直接减 Date 对象不行吗?

不行。本地时区切进夏令时的那天只有 23 小时、切回来那天有 25 小时,跨越这两天的区间直接相减再取整会差出一天。本页把两个日期都构造成 UTC 零点再相减,差值恒为 86400000 的整数倍。

整月数和总天数为什么不成比例?

整月数只数日历月,每月长度从 28 到 31 天不等,闰年还多一天;总天数按实际毫秒差算。所以整月数每次增加 12 时,总天数增加 365 或 366。两个口径分别回答不同问题,不能互相换算。

截至日期可以填未来的日期吗?

可以。本页不做「不能超过今天」的限制,填未来日期算的是从出生到那天满几个月、一共多少天,常用于推算保险合同整月数、租约结算日或某个纪念日的时间跨度。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具