夜雨聆风学习资料网

ARTICLE · 1243344

Excel小技巧:五个日期函数,让表格里的时间信息自动更新

Excel小技巧:五个日期函数,让表格里的时间信息自动更新

你的人事表里有一列入职日期,旁边需要显示"工龄"。你手动算了一下:张三 2020 年 3 月入职,到今天 6 年 7 个月。填上去了。

问题是,"今天"是今天。下个月再看这张表,张三的工龄应该是 6 年 8 个月,但你填的还是 6 年 7 个月。因为你填的是一个固定的数字,它不会自己变化。

类似的场景还有很多:

  • 合同到期日减 30 天,标记"即将到期"
  • 员工生日算出年龄
  • 项目开始日期到今天,算已过天数
  • 两个日期之间有多少个工作日

这些场景有一个共同特点:它们都涉及"当前日期",而当前日期每天都在变。如果你每次都手动更新,迟早会漏。

今天教你五个日期函数,让表格里的时间相关信息全部自动更新。设一次,永远不用手动改。

函数一:TODAY() — 永远显示今天

最简单的一个函数。在任何单元格里输入:

=TODAY()

这个单元格就会永远显示今天的日期。今天是 2026 年 10 月 24 日,它就显示 2026-10-24。明天打开,自动变成 2026-10-25。

不需要任何参数,括号里什么都不写。

它的价值在于做"动态基准"。比如你想知道"距离合同到期还有多少天":

=D2-TODAY()

D2 是合同到期日,减去今天,结果就是剩余天数。正数表示还没到期,负数表示已经过期。

注意:TODAY() 是"易失性函数"。意思是每次你打开文件、做任何编辑操作,它都会重新计算。所以你每次打开表,看到的都是最新的日期。这是它的优点,也是唯一需要注意的地方——如果表特别大、公式特别多,大量易失性函数可能让表格变慢。

函数二:NOW() — 永远显示此刻

和 TODAY() 几乎一样,但它精确到时间。

=NOW()

显示的是当前日期加当前时间,比如"2026-10-24 19:17"。

如果你只需要日期不需要时间,用 TODAY() 就好。NOW() 适合需要精确到小时分钟的场景,比如记录"最后更新时间"、计算"距离截止时间还有几小时"等。

NOW() 也是易失性函数,每次操作都会刷新。

函数三:DATEDIF — 算工龄、年龄、间隔的神器

这是今天最重要的一个函数,也是 Excel 里最"神秘"的一个函数——你在 Excel 的函数列表里找不到它,在帮助文档里也搜不到它。它真实存在,而且极其好用。

DATEDIF 的全称是 Date Difference(日期差值),它的作用是计算两个日期之间的间隔,并且可以按年、按月、按日来显示。

语法:

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

第三个参数"单位"决定返回什么:

单位
含义
示例
“Y”
完整年数
2020.3.15 到 2026.10.24 → 6
“M”
完整月数
2020.3.15 到 2026.10.24 → 79
“D”
天数
2020.3.15 到 2026.10.24 → 2414
“YM”
去年数后的剩余月
2020.3.15 到 2026.10.24 → 7
“MD”
去月数后的剩余天
2020.3.15 到 2026.10.24 → 9
“YD”
去年数后的剩余天
2020.3.15 到 2026.10.24 → 223

实战:算工龄

假设 A2 是入职日期,你想显示"X年Y个月":

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

如果 A2 是 2020-03-15,结果就是"6年7个月"。明天打开,自动变成正确的值。不需要手动更新。

实战:算年龄

假设 B2 是出生日期:

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

返回完整年龄。

实战:合同到期倒计时

假设 C2 是到期日期,想看"还剩X年X月":

=IF(C2>TODAY(), DATEDIF(TODAY(),C2,"Y")&"年"&DATEDIF(TODAY(),C2,"YM")&"月后到期", "已过期")

用 IF 判断一下是否已经过了到期日,没过的话正向计算剩余时间,过了就显示"已过期"。

函数四:NETWORKDAYS — 算工作日

TODAY() 和 DATEDIF 算的都是自然日。但很多业务场景需要的是工作日——去掉周末和法定节假日。

比如:“这个项目从 9 月 1 日开始到今天,实际工作了多少天?”

=NETWORKDAYS("2026-9-1", TODAY())

这个函数会自动排除周六和周日,只计算周一到周五的天数。

如果你还需要排除特定的法定节假日(比如国庆节 7 天),可以把假期日期放在一个区域里(比如 Z1:Z7),写成:

=NETWORKDAYS("2026-9-1", TODAY(), Z1:Z7)

第三个参数是可选的"假期列表"。Excel 会把周末加上这些日期一起排除。

反向用法: 如果你想知道"从今天开始,30 个工作日之后是哪天"(比如算交货日期),用 WORKDAY 函数:

=WORKDAY(TODAY(), 30, Z1:Z7)

它会跳过周末和假期,返回准确的交货日期。

函数五:EOMONTH — 算月末日期

这个函数用来算"某个月最后一天"的日期。

语法:

=EOMONTH(开始日期, 月偏移量)

比如:

=EOMONTH(TODAY(), 0)

返回本月最后一天的日期。今天是 10 月 24 日,结果是 2026-10-31。

=EOMONTH(TODAY(), 1)

返回下个月最后一天,即 2026-11-30。

=EOMONTH(TODAY(), -1)

返回上个月最后一天,即 2026-09-30。

实战场景:

  • 算本月还剩几天:=EOMONTH(TODAY(),0)-TODAY()
  • 算应收账款账期(每月月底结算):=EOMONTH(开票日期, 2),表示开票后第2个月月底到期
  • 生成年末日期:=EOMONTH(“2026-1-1”, 11),返回 2026-12-31

五个函数的配合实战

场景一:员工信息看板

字段
公式
工龄
=DATEDIF(入职日期,TODAY(),“Y”)&“年”&DATEDIF(入职日期,TODAY(),“YM”)&“个月”
年龄
=DATEDIF(出生日期,TODAY(),“Y”)
本月生日?
=IF(MONTH(出生日期)=MONTH(TODAY()),“是”,“否”)
合同剩余天数
=合同到期日-TODAY()

所有信息自动更新,不需要每月初手动改一遍。

场景二:项目进度追踪

字段
公式
已过天数
=TODAY()-项目开始日期
已过工作日
=NETWORKDAYS(项目开始日期,TODAY(),假期列表)
剩余天数
=项目截止日-TODAY()
进度状态
=IF(TODAY()>项目截止日,“已超期”,IF(TODAY()>项目截止日-7,“即将到期”,“正常”))

场景三:财务账期管理

字段
公式
本月最后一天
=EOMONTH(TODAY(),0)
本月已过天数
=TODAY()-DATE(YEAR(TODAY()),MONTH(TODAY()),1)+1
本月剩余天数
=EOMONTH(TODAY(),0)-TODAY()
本季最后一天
=EOMONTH(TODAY(),MOD(3-MONTH(TODAY()),3))

几个容易踩的坑

第一,DATEDIF 的参数顺序不能反。 第一个参数是开始日期(较早的),第二个是结束日期(较晚的)。如果开始日期晚于结束日期,函数会返回 #NUM! 错误。如果你不确定哪个日期更早,可以套一个 IF 判断,或者用 ABS 取绝对值(但 ABS 只对 “D” 单位有效,对 “Y” 和 “M” 不行)。

第二,DATEDIF 没有函数提示。 因为它是"隐藏函数",输入时 Excel 不会弹出参数提示。你需要自己记住语法:=DATEDIF(日期1, 日期2, “单位”)。

第三,TODAY() 和 NOW() 每次打开都会刷新。 如果你需要记录一个"固定时间戳"(比如"这条数据是什么时候录入的"),不要用 TODAY(),用 Ctrl+;(插入当前日期)或 Ctrl+Shift+;(插入当前时间)。这两个快捷键插入的是静态值,不会自动更新。

第四,NETWORKDAYS 的假期列表需要手动维护。 Excel 不会自动知道中国的法定节假日是哪天。你需要每年在表格的某个区域列出当年的假期日期,作为第三个参数引用。建议在一个单独的 Sheet 里维护一张"年度假期表",所有公式统一引用它。

第五,日期计算的结果要改格式。 TODAY()-某个日期,结果是一个数字(天数差)。如果你不小心给这个单元格设了日期格式,它会显示成一个奇怪的日期。确保计算结果的单元格格式是"常规"或"数值",而不是"日期"。

今天的总结

五个日期函数速记:

函数
用途
一句话记住
TODAY()
永远显示今天
写下去就永远是"今天"
NOW()
永远显示此刻
比 TODAY 多了时间
DATEDIF
算两个日期的间隔
Y=年, M=月, D=天
NETWORKDAYS
算工作日天数
自动去掉周末
EOMONTH
算月末日期
偏移0=本月末,1=下月末

这五个函数覆盖了日常工作中 90% 的日期计算需求。学会之后,你的表格里再也不会出现"上次手动填的日期已经过了三个月"这种尴尬。


——E晓分享,共同进步——

相关学习资料