Excel 日期函数怎么用?算年龄、算天数、算到期日
员工档案要算年龄、合同台账要算剩余账期、项目计划要算距截止还差几天——这些都是日期运算。Excel 有一套内置函数可以做,但格式一乱就报错、DATEDIF 还是隐藏函数。本文把常用公式说清楚,最后教你用超级表(TableDI)的公式面板或一句话 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 个月"这样的结果。
#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 处理功能,一句话描述需求就能得到结果。
用公式面板算日期差,步骤:
- 打开超级表,把带有日期列的表格导入(Excel / CSV 拖进来即可)。
- 新建一个计算列,点击「公式面板」。
- 在面板里选择「日期差」运算,点选「开始日期」字段和「结束日期」字段,选择单位(天 / 月 / 年)。
- 确认——结果列自动填好,后续数据更新时自动重算。
用 AI 处理算年龄,步骤:
- 选中有出生日期的列,点击「AI 处理」。
- 输入一句话:「根据出生日期算到今天的年龄(整年数)」。
- AI 理解需求,生成对应的计算逻辑,结果写入新列。
公式面板和 AI 处理都属于超级表的公式面板(含日期运算)能力,与 Excel 函数的区别可以看用公式面板代替 VLOOKUP那篇文章,里面有更详细的对比。如果你还需要从身份证号里直接提取出生日期再算年龄,参考从身份证提取生日、手机号。
Excel 日期函数 vs 超级表
| 场景 | Excel 公式 | 超级表 |
|---|---|---|
| 两日期相差天数 | =B2-A2(注意格式) | 公式面板点选,无需记格式 |
| 算年龄(整年) | =DATEDIF(B2,TODAY(),"Y") | 公式面板选「年龄」或 AI 一句话 |
| 算合同到期日 | =A2+天数 或 EDATE | 公式面板选「日期加减」 |
| 文本日期 | 需先转格式,易报错 | 导入时自动识别常见日期格式 |
| 算工作日 | NETWORKDAYS | AI 处理:「排除周末算工作日」 |
| 上手难度 | 需记函数名、参数顺序 | 点选或自然语言描述 |
常见问题
为什么日期相减出来是一个奇怪的日期,不是天数?
Excel 把差值所在单元格自动套用了日期格式,比如差值是 5,就显示成「1900-01-05」。选中该单元格,在「单元格格式」里把格式改成「数值」或「常规」,就会显示数字 5。这是格式显示问题,计算本身没有错。
文本日期怎么转成真日期?
最稳的办法:选中这一列 → 数据 → 分列 → 一路下一步 → 第三步「列数据格式」选「日期」,选好年月日的排列顺序 → 完成。Excel 会把文本解析成日期序列号。如果日期格式比较奇怪(如"20240315"八位数字),可以先用 TEXT、MID 等函数拆成年月日,再用 DATE 拼起来。超级表导入时会自动识别多数常见格式,减少手动转换。
怎么只算工作日,排除周末和节假日?
用 NETWORKDAYS(开始日期, 结束日期) 可以排除周末;如果还要排除国家法定假日,需要在表格里单独维护一列节假日列表,然后写 NETWORKDAYS(开始, 结束, 节假日区域)。节假日列表每年都要手动更新,比较麻烦。在超级表里可以用 AI 处理直接描述:「按工作日算两个日期的间隔,排除周末」,减少手动维护工作。