Excel 公式

Excel 日期函数怎么用?算年龄、算天数、算到期日

更新于 2026-06-04 · 阅读约 7 分钟

员工档案要算年龄、合同台账要算剩余账期、项目计划要算距截止还差几天——这些都是日期运算。Excel 有一套内置函数可以做,但格式一乱就报错、DATEDIF 还是隐藏函数。本文把常用公式说清楚,最后教你用超级表(TableDI)的公式面板或一句话 AI,不记函数也能算出来。


超级表中由日期字段算出年龄/天数差的示意
由出生日期算年龄、由两个日期算天数——超级表里点选或让 AI 算。

日期相减算天数:最简单的起点

Excel 内部把每个日期存成一个整数(从 1900-01-01 起的序列号),所以两个日期相减直接得到天数差。假设 A2 是开始日期、B2 是结束日期:

=B2-A2

结果就是相差多少天,不需要任何函数。但有两个常见的坑:

  • 结果显示成日期格式而不是数字:Excel 有时会把差值单元格自动套日期格式,看到「1900-01-05」其实是 5 天。解决方法:选中结果单元格,把格式改成「数值」或「常规」。
  • A2 或 B2 其实是文本:如果单元格左对齐、或者来自导入/粘贴,十有八九是文本日期,直接减会得到 #VALUE!。需要先转格式,后文讲。

算从今天到某个截止日还剩多少天,用 TODAY() 函数代替固定日期:

=A2-TODAY()

TODAY() 每次打开文件自动更新为当天,不需要手动改。同类的 NOW() 返回当前日期加时间,精确到秒,一般账期计算用 TODAY() 即可。

用 DATEDIF 算年龄和年月差

DATEDIF 是 Excel 里一个"隐藏"函数——它能用,但在函数向导里找不到,也没有自动补全提示。语法是:

=DATEDIF(开始日期, 结束日期, 单位)

常用单位有三种:

  • "Y":完整年数(算年龄最常用)
  • "M":完整月数
  • "D":天数(和直接相减等价)

算员工年龄(B2 是出生日期,今天为止满几岁):

=DATEDIF(B2, TODAY(), "Y")

要显示"X 年 Y 个月",可以把年和月组合起来:

=DATEDIF(B2,TODAY(),"Y")&"年"&DATEDIF(B2,TODAY(),"YM")&"个月"

其中 "YM" 是「扣掉整年之后剩的月数」,配合 "Y" 一起用就能显示"38 年 4 个月"这样的结果。

DATEDIF 是隐藏函数,要注意两点
第一,开始日期必须小于等于结束日期,反过来会报 #NUM!。第二,Excel 帮助文档里没有这个函数,是从 Lotus 1-2-3 时代继承来的,Google Sheets 同样支持。

算到期日和 N 天后的日期

合同签订日在 A2,有效期 30 天,到期日是多少?

=A2+30

日期加上一个整数,Excel 直接向后推那么多天。同理,A2 往前推 7 天:=A2-7

如果要按月计算——比如合同有效期 6 个月,用 EDATE 函数更准确(避免大月小月问题):

=EDATE(A2, 6)

EDATE 的第二参数是月数,正数往后推、负数往前推。加一年就是 =EDATE(A2, 12)

要构造一个特定日期,比如把年、月、日三列合成一个日期,用 DATE 函数:

=DATE(年列, 月列, 日列)

这在身份证提取出生日期后重新拼日期时特别有用,可以配合从身份证提取生日一起看。

日期函数常踩的坑

  • 文本日期算不了: 从系统导出、网页复制来的日期往往是文本(单元格左对齐是信号)。直接用 DATEDIF 或相减都会报 #VALUE!。转换方法:选中该列 → 数据 → 分列 → 第三步选「日期」格式 → 完成。或者用 DATEVALUE 函数:=DATEVALUE("2024-03-15"),但格式必须能被 Excel 识别。
  • 格式乱: 同一列出现"2024/3/15"和"2024-3-15"混搭,DATEDIF 算到混搭行就出错。导入前统一格式是最省事的做法。
  • 跨系统日期偏 4 年: Mac 版 Excel 历史上用 1904 年起始系统,Windows 版用 1900 年。在 Mac 上做的文件拿到 Windows 上开,日期可能差 4 年。现代 Excel 已经默认统一,但老文件要小心。
  • DATEDIF 没有自动补全: 只能手动输入,拼写错了不报错只报 #NAME?
工作日怎么算?
如果要排除周末计算净工作日天数,用 NETWORKDAYS(开始, 结束);要再排除节假日,把节假日列表作为第三参数传入 NETWORKDAYS(开始, 结束, 节假日区域)

更简单:超级表公式面板或 AI 算日期

超级表(TableDI)是一款桌面端高能表格助手,macOS / Windows 均支持,离线运行、不需要登录。它内置了公式面板,把日期运算做成了点选操作,不用背函数;还有 AI 处理功能,一句话描述需求就能得到结果。

公式面板算日期差,步骤:

  1. 打开超级表,把带有日期列的表格导入(Excel / CSV 拖进来即可)。
  2. 新建一个计算列,点击「公式面板」。
  3. 在面板里选择「日期差」运算,点选「开始日期」字段和「结束日期」字段,选择单位(天 / 月 / 年)。
  4. 确认——结果列自动填好,后续数据更新时自动重算。

AI 处理算年龄,步骤:

  1. 选中有出生日期的列,点击「AI 处理」。
  2. 输入一句话:「根据出生日期算到今天的年龄(整年数)」。
  3. AI 理解需求,生成对应的计算逻辑,结果写入新列。

公式面板和 AI 处理都属于超级表的公式面板(含日期运算)能力,与 Excel 函数的区别可以看用公式面板代替 VLOOKUP那篇文章,里面有更详细的对比。如果你还需要从身份证号里直接提取出生日期再算年龄,参考从身份证提取生日、手机号

Excel 日期函数 vs 超级表

场景Excel 公式超级表
两日期相差天数=B2-A2(注意格式)公式面板点选,无需记格式
算年龄(整年)=DATEDIF(B2,TODAY(),"Y")公式面板选「年龄」或 AI 一句话
算合同到期日=A2+天数EDATE公式面板选「日期加减」
文本日期需先转格式,易报错导入时自动识别常见日期格式
算工作日NETWORKDAYSAI 处理:「排除周末算工作日」
上手难度需记函数名、参数顺序点选或自然语言描述

常见问题

为什么日期相减出来是一个奇怪的日期,不是天数?

Excel 把差值所在单元格自动套用了日期格式,比如差值是 5,就显示成「1900-01-05」。选中该单元格,在「单元格格式」里把格式改成「数值」或「常规」,就会显示数字 5。这是格式显示问题,计算本身没有错。

文本日期怎么转成真日期?

最稳的办法:选中这一列 → 数据 → 分列 → 一路下一步 → 第三步「列数据格式」选「日期」,选好年月日的排列顺序 → 完成。Excel 会把文本解析成日期序列号。如果日期格式比较奇怪(如"20240315"八位数字),可以先用 TEXTMID 等函数拆成年月日,再用 DATE 拼起来。超级表导入时会自动识别多数常见格式,减少手动转换。

怎么只算工作日,排除周末和节假日?

NETWORKDAYS(开始日期, 结束日期) 可以排除周末;如果还要排除国家法定假日,需要在表格里单独维护一列节假日列表,然后写 NETWORKDAYS(开始, 结束, 节假日区域)。节假日列表每年都要手动更新,比较麻烦。在超级表里可以用 AI 处理直接描述:「按工作日算两个日期的间隔,排除周末」,减少手动维护工作。

不想记 DATEDIF 参数?

免费下载超级表,公式面板点选日期运算,或一句话让 AI 帮你算年龄、天数、到期日

免费下载(macOS / Windows)