欢迎光临
我们一直在努力

Excel函数系列05:DATEDIF+EDATE+EOMONTH,算工龄、账期、到期日一次搞定

摘要:本文是 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 转换。

    方法一:用“分列”转成真日期

  • 选中日期那一列(比如 A 列)
  • 点击「数据」→「分列」
  • 第 1 步:选择“分隔符号”,点下一步
  • 第 2 步:分隔符号不勾选任何选项,直接点下一步
  • 第 3 步:列数据格式选择“日期”,右侧选“YMD”,点完成
  • 这样文本日期就变成了真正的日期,右对齐,可以直接参与计算。

    方法二:用 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,拆分提取不求人。

    赞(0)
    未经允许不得转载:171主机测评 » Excel函数系列05:DATEDIF+EDATE+EOMONTH,算工龄、账期、到期日一次搞定
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址