=DATEDIF(B2,TODAY(),"Y") 返回出生日期在 B2 的人的周岁年龄。DATEDIF 计算两个日期之间的完整年数,TODAY() 提供第二个日期,所以每到生日年龄就加一。
| A | B | C | |
|---|---|---|---|
| 1 | Name | Born | Age |
| 2 | Ana | 1990-05-14 | 36 |
| 3 | Ben | 1985-11-30 | 40 |
| 4 | Chloe | 2001-02-28 | 25 |
| 5 | Dan | 1978-10-10 | 47 |
| 6 | Eva | 2010-07-04 | 16 |
C 列的年龄按今天的日期计算,所以会随着时间推移而变化。修改 B 列中的出生日期,旁边的年龄也会跟着变。这个公式有三个参数:开始日期(出生日期)、结束日期(今天)和单位,"Y" 表示完整的年数。
指定日期的年龄
要得到某个固定日期的年龄,例如学年开始日或合同签订日,把那一天放进一个单元格,用这个单元格代替 TODAY()。$F$2 中的 $ 让公式向下填充时引用始终指向 F2。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | Born | Age | As of | ||
| 2 | Ana | 1990-05-14 | 36 | 2026-10-01 | ||
| 3 | Ben | 1985-11-30 | 40 | |||
| 4 | Chloe | 2001-02-28 | 25 | |||
| 5 | Dan | 1978-10-10 | 47 | |||
| 6 | Eva | 2010-07-04 | 16 |
在 2026-10-01,Ana 36 岁,Dan 47 岁:他 10 月 10 日的生日还没到。把 F2 改成 2026-10-10,Dan 就满 48 岁了。这种写法每次打开文件结果都一样,当年龄要写进报告时这一点很重要。其他单位请参阅 DATEDIF 页面。
精确到年、月、日的年龄
DATEDIF 还有计算完整年数之外剩余部分的单位:"YM" 计算最后一个完整年之后的月数,"MD" 计算最后一个完整月之后的天数。用 & 把三者连起来,就能把年龄写成文本。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Born | Years | Months | Days | Age | As of |
| 2 | 1990-05-14 | 36 | 4 | 17 | 36 years, 4 months, 17 days | 2026-10-01 |
| 3 | 1978-10-10 | 47 | 11 | 21 | 47 years, 11 months, 21 days |
从 1990-05-14 到 2026-10-01 是 36 年 4 个月 17 天。Microsoft 不建议使用 "MD" 单位,因为在某些情况下(例如出生日期在 31 日)它可能返回负数或错误的天数。出生日期在 29 日至 31 日时,请核对天数。
不用 DATEDIF 计算年龄
DATEDIF 在所有 Excel 版本中都能用,但它不在函数列表里,输入公式时也不会自动补全,所以有些人更喜欢 YEARFRAC。YEARFRAC(start,end,1) 以小数形式返回两个日期之间的年数,并按每年的实际长度计算(基准 1)。INT 去掉小数部分。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Born | As of | DATEDIF | YEARFRAC |
| 2 | 1990-05-14 | 2026-10-01 | 36 | 36 |
| 3 | 1978-10-10 | 2026-10-01 | 47 | 47 |
| 4 | 2010-07-04 | 2026-10-01 | 16 | 16 |
两列结果一致:36、47 和 16。如果不加 INT,最后一行的 YEARFRAC 约为 16.24,当你需要小数形式的年龄时(例如在统计表中)这很有用。
为什么不要除以 365
一种常见的捷径是 =INT((F2-B2)/365):用活过的天数除以一年的天数。闰年每四年多一天,所以过了几十年后,这个公式会在生日之前几天就跳到下一个年龄:48 岁生日会提前 12 天。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Born | As of | Days lived | Divide by 365 | DATEDIF |
| 2 | 1990-05-14 | 2026-10-01 | 13289 | 36 | 36 |
| 3 | 1978-10-10 | 2026-10-01 | 17523 | 48 | 47 |
对于 1978-10-10 出生的人,除以 365 在 2026-10-01 得到 48 岁,比 48 岁生日早了九天。DATEDIF 给出的是 47。除以 365.25 能修正大多数行,但在某些日期仍然会出错,所以请使用 DATEDIF 或 YEARFRAC。
练习:开学第一天的年龄
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Born | Age | As of | |
| 2 | Ana | 2012-04-17 | 2026-09-01 |
轮到你了: 在 C2 中,计算 Ana 在 E2 日期时的周岁年龄。
隐藏的检查会修改 E2 中的日期,所以公式必须读取它。
为什么年龄显示成了日期
如果你把年龄公式输入到已经包含日期的单元格中,或输入到设置为日期格式的列中,Excel 会保留日期格式,把 36 显示为 1900-02-05(Excel 日期系统中的第 36 天;在美国区域设置下显示为 2/5/1900)。底下的数字其实是对的。选中这些单元格,选择“开始 > 数字格式 > 常规”(或按 Ctrl+Shift+~,Mac 上按 Control+Shift+~),年龄就会显示出来。
常见问题
Excel 中计算年龄的公式是什么?
=DATEDIF(B2,TODAY(),"Y"),出生日期在 B2 中。它计算从出生日期到今天的完整年数,所以年龄在生日当天才加一,不会提前。
在 Excel 中如何计算某个指定日期的年龄?
把日期放进一个单元格,用它代替 TODAY():=DATEDIF(B2,$F$2,"Y") 给出在 F2 那天的年龄。$ 符号让你向下填充公式时 F2 保持不变。
在 Excel 中不用 DATEDIF 如何计算年龄?
用 =INT(YEARFRAC(B2,TODAY(),1))。YEARFRAC 以小数形式返回两个日期之间的年数,INT 只保留整数年。
为什么我的年龄公式显示成 1900-01-30 这样的日期?
这个单元格被设置成了日期格式,所以年龄 30 显示成了 Excel 日历中的第 30 天。选中单元格,把“开始 > 数字格式”设为“常规”。
为什么用 365 去除来算年龄是错的?
闰年每四年多一天,所以 =INT((TODAY()-B2)/365) 会提前几天算到生日:1978-10-10 出生的人,按这个公式在 2026-10-01 就是 48 岁,比真正满 48 岁早了九天。DATEDIF 按日历年计算,没有这个误差。