摘要:本文是 Excel 函数系列第 05 篇,系统讲解日期计算的三大核心函数——DATEDIF(算间隔)、EDATE(算几个月后)、EOMONTH(算月末)。文章从“日期本质是数字”讲起,先介绍 TODAY、NOW、DATE 三个基础函数,再逐一拆解三剑客的语法与典型用法(工龄、年龄、账龄、合同到期、账期、还款日等),最后给出 6 个实战案例、条件格式自动标红技巧,以及新手最容易踩的 6 个坑。读完即可直接套用到日常表格中。

前四期我们讲了:
- 01:SUMIFS+COUNTIFS,多条件统计
- 02:VLOOKUP+IFERROR+MATCH,跨表取数
- 03:IFS+IFERROR,条件判断
- 04:SUMPRODUCT,复杂统计
统计、查找、判断、复杂统计都齐了。
但有一类数据,几乎每张表里都有,却总被人手动算:日期。
工龄几年几个月?合同还有几天到期?发货后 30 天账期是哪天?本月末是哪天?
很多人拿着日历一个一个数,数完还不敢确定对不对。
其实,Excel 早就给你准备好了日期计算的“三剑客”:
DATEDIF + EDATE + EOMONTH。
一句话记住它们:
- DATEDIF:算两个日期之间差多少年、多少月、多少天
- EDATE:算几个月之后(或之前)是哪天
- EOMONTH:算某个月的最后一天是哪天
算间隔用 DATEDIF,算几个月后用 EDATE,算月末用 EOMONTH。
今天一次讲透。
一、先搞懂:日期在 Excel 里到底是什么
很多人日期算不对,根源是没搞懂这件事:
在 Excel 里,日期本质上就是一个数字。
- 1900/1/1 = 1
- 1900/1/2 = 2
- 2024/1/1 = 45292
所以你看到的“2024/1/1”,只是显示格式,底层是 45292。
正因为是数字,日期才能加减、比较、排序。
但要注意:
- 真正的日期:右对齐,可以直接加减
- 文本日期:左对齐,不能直接计算
如果日期是文本,先转换成真日期,否则后面全错。
二、基础三件套:TODAY、NOW、DATE
在讲三剑客之前,先认识三个基础函数。
1. TODAY:今天日期
=TODAY()
返回今天的日期,自动更新。
明天打开文件,它就变成明天的日期。
2. NOW:当前日期和时间
=NOW()
返回当前日期和时间,也自动更新。
3. DATE:拼出一个日期
=DATE(2024, 1, 1)
返回 2024/1/1。
好处是:年、月、日可以引用单元格,动态生成日期。
比如:
=DATE(A2, B2, C2)
A2 是年,B2 是月,C2 是日,拼成一个日期。
三、DATEDIF:算工龄、年龄、账龄
DATEDIF 是日期函数里的“隐藏高手”。
输入的时候 Excel 不会提示参数,但它确实能用。
语法:
=DATEDIF(开始日期, 结束日期, 单位)
单位有以下几种:
| “Y” | 整年数 |
| “M” | 整月数 |
| “D” | 天数 |
| “YM” | 忽略年,算月数 |
| “MD” | 忽略年月,算天数 |
| “YD” | 忽略年,算天数 |
1. 算工龄:几年
=DATEDIF(入职日期, TODAY(), "Y")
比如入职日期是 2020/1/1,今天是 2026/9/12,返回 6。
意思是:工龄 6 年。
2. 算工龄:几年几个月
=DATEDIF(入职日期, TODAY(), "Y") & "年" & DATEDIF(入职日期, TODAY(), "YM") & "个月"
返回:6 年 8 个月。
解释:
- "Y":算整年
- "YM":忽略年,算剩余的月数
3. 算账龄:多少天
=DATEDIF(发货日期, TODAY(), "D")
返回发货到今天的天数。
4. 算年龄
=DATEDIF(出生日期, TODAY(), "Y")
返回周岁年龄。
5. 算合同剩余天数
=DATEDIF(TODAY(), 合同到期日, "D")
返回还有多少天到期。
如果是负数,说明已经过期。
四、EDATE:几个月后的日期
EDATE 用来算“几个月之后”或“几个月之前”。
语法:
=EDATE(开始日期, 月数)
- 月数为正:往后算
- 月数为负:往前算
1. 合同 3 年后到期
=EDATE(签约日期, 36)
2. 账期 30 天后
30 天约等于 1 个月:
=EDATE(发货日期, 1)
3. 试用期 3 个月
=EDATE(入职日期, 3)
4. 提前 1 个月提醒
=EDATE(到期日, -1)
5. 注意月份边界
EDATE 有个特点:
如果开始日期是 1 月 31 日,加 1 个月,结果是 2 月 28 日(或 29 日),不是 3 月 3 日。
比如:
=EDATE(DATE(2024,1,31), 1)
返回 2024/2/29。
这是 Excel 的设计逻辑:加月后,如果目标月没有这一天,就取该月最后一天。
五、EOMONTH:某个月的最后一天
EOMONTH 用来算某个月的最后一天。
EOM 就是 End of Month。
语法:
=EOMONTH(开始日期, 月数)
- 月数为 0:本月末
- 月数为 1:下月末
- 月数为 -1:上月末
1. 本月末
=EOMONTH(TODAY(), 0)
2. 下月末
=EOMONTH(TODAY(), 1)
3. 上月末
=EOMONTH(TODAY(), -1)
4. 本月第一天
=EOMONTH(TODAY(), -1)+1
5. 算月结日、还款日
比如每月 25 日还款,本月还款日:
=DATE(YEAR(TODAY()), MONTH(TODAY()), 25)
如果还款日是月末:
=EOMONTH(TODAY(), 0)
六、实战案例
下面的案例都基于一张简单的员工/合同信息表,你只需要准备这几列,就能直接套用公式:
| A 列 | 姓名 | 员工姓名(可选) |
| B 列 | 入职日期 / 发货日期 | 作为起始日期 |
| C 列 | 合同到期日 | 用于到期提醒 |
| D 列 | 剩余天数 | 存放计算结果,配合条件格式标红 |
建议:B、C 两列务必是真正的日期(右对齐),如果是文本日期,先按第八节的方法转成真日期,否则公式会报错。
下面每个案例都会标注它用到了哪一列,照着填数据即可。
1. 算工龄:几年几个月
=DATEDIF(B2, TODAY(), "Y") & "年" & DATEDIF(B2, TODAY(), "YM") & "个月"
B2 是入职日期。
结果比如:6年8个月。
2. 合同到期提醒
=IF(DATEDIF(TODAY(), C2, "D")<0, "已过期", IF(DATEDIF(TODAY(), C2, "D")<=30, "即将到期", "正常"))
C2 是合同到期日。
逻辑:
- 已过期:显示“已过期”
- 30 天内到期:显示“即将到期”
- 否则:显示“正常”
3. 账期计算:发货后 30 天、60 天、90 天
=EDATE(B2, 1)
B2 是发货日期,加 1 个月,约等于 30 天账期。
60 天:
=EDATE(B2, 2)
90 天:
=EDATE(B2, 3)
4. 项目倒计时
=DATEDIF(TODAY(), 项目截止日, "D")
返回还有几天。
配合条件格式,少于 7 天自动标红。
5. 算本月剩余天数
=EOMONTH(TODAY(), 0)-TODAY()
返回本月还剩多少天。
6. 算某月有多少天
=DAY(EOMONTH(TODAY(), 0))
返回本月总天数。
七、配合条件格式:到期自动标红
算出剩余天数后,可以用条件格式让 Excel 自动提醒。
步骤:
=$D2<=30
这样,30 天内到期的行会自动标红,一眼就能看到。
八、新手最容易踩的6个坑
1. 日期格式不对,变成文本
从系统导出的日期,经常是文本格式。
左对齐的日期,不能直接计算。
解决办法:用“分列”转成日期,或者用 DATEVALUE 转换。
方法一:用“分列”转成真日期
这样文本日期就变成了真正的日期,右对齐,可以直接参与计算。
方法二:用 DATEVALUE 函数转换
如果不想动原数据,可以用公式生成一列真日期:
=DATEVALUE(A2)
A2 是文本日期,返回对应的真日期序列号。
再配合 TEXT 设置显示格式:
=TEXT(DATEVALUE(A2), "yyyy/mm/dd")
这样就能把文本日期快速转成可计算的日期。
2. DATEDIF 没有提示,拼写要准
DATEDIF 是隐藏函数,输入时 Excel 不会提示参数。
拼写错误会直接报 #NAME?。
注意:是 DATEDIF,不是 DATEDIFF。
3. EDATE/EOMONTH 返回的是序列号
有时候算出来是 45292 这样的数字,不是日期。
因为单元格格式是“常规”。
解决办法:把单元格格式改成“日期”。
4. 月份边界问题
1 月 31 日加 1 个月,结果是 2 月 28/29 日,不是 3 月 1 日。
这是正常逻辑,但用的时候要心里有数。
5. TODAY/NOW 是易失性函数
每次打开文件、修改单元格,它们都会重新计算。
数据量大时,会拖慢速度。
如果不需要自动更新,可以写死日期。
6. 跨年、闰年要特别注意
DATEDIF 算整年、整月时,是按实际日历算的。
闰年 2 月 29 日、跨年月份,都要留意边界情况。
九、总结
记住这三句话:
- 算间隔:用 DATEDIF
- 算几个月后:用 EDATE
- 算月末:用 EOMONTH
再配合 TODAY、DATE、IF,就能搞定:
- 工龄、年龄、账龄
- 合同到期、试用期、还款日
- 账期、月结日、项目倒计时
- 到期自动标红提醒
组合公式:
=DATEDIF(开始日期, TODAY(), "Y") & "年" & DATEDIF(开始日期, TODAY(), "YM") & "个月"
=EDATE(开始日期, 月数)
=EOMONTH(开始日期, 月数)
这就是 Excel 函数系列的第 05 篇。
学会 DATEDIF+EDATE+EOMONTH,算工龄、账期、到期日,一次搞定。
下一期我们讲文本函数:LEFT+RIGHT+MID+TEXTSPLIT,拆分提取不求人。





