TODAY、EDATE、EOMONTH、DATEDIF、WORKDAY:日期与时间计算

适用场景

算工龄、算账期、算合同到期日、算两个日期之间有多少个工作日、把时间差显示成小时数。Excel 的日期本质是数字,时间是小數;理解这一点,日期加减和格式显示就不会乱。

日期与时间的本质

常用函数

函数 作用 示例
TODAY() 今天的日期,不含时间 =TODAY()
NOW() 当前日期和时间 =NOW()
DATE(y,m,d) 构造日期 =DATE(2026,10,31)
YEAR/MONTH/DAY 取年/月/日 =YEAR(A2)
EOMONTH(start, months) 某月最后一天 =EOMONTH(A2,0)
EDATE(start, months) 几个月后的同一天 =EDATE(A2,3)
DATEDIF(start,end,unit) 两个日期的间隔 =DATEDIF(A2,TODAY(),"Y")
DAYS(end,start) 两个日期相差天数 =DAYS(B2,A2)
WORKDAY(start,days,[holidays]) 若干个工作日后的日期 =WORKDAY(A2,10,$H$2:$H$10)
NETWORKDAYS(start,end,[holidays]) 两个日期之间的工作日数 =NETWORKDAYS(A2,B2,$H$2:$H$10)
WEEKDAY(date,[type]) 星期几 =WEEKDAY(A2,2)
WEEKNUM(date,[type]) 一年中的第几周 =WEEKNUM(A2,2)

WORKDAY.INTL 和 NETWORKDAYS.INTL 可以自定义周末(例如周五、周六休息),Excel 2010 及以上可用。

常用计算

算年龄/工龄

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

DATEDIF 的第三个参数:

单位 含义
"Y" 整年数
"M" 整月数
"D" 天数
"YM" 忽略年后的月数
"MD" 忽略年、月后的天数
"YD" 忽略年后的天数

DATEDIF 在部分 Excel 版本的函数列表里不显示,但公式仍可用;结束日期早于开始日期会返回 #NUM!。

算到期日

三个月后的同一天
=EDATE(A2,3)

本月最后一天
=EOMONTH(A2,0)

下个月最后一天
=EOMONTH(A2,1)

上个月最后一天
=EOMONTH(A2,-1)

EDATE 遇到目标月份没有对应日期时会取月末:2026-01-31 加一个月得到 2026-02-28(或闰年 02-29)。

算工作日

10 个工作日后的日期(排除节假日)
=WORKDAY(A2,10,$H$2:$H$10)

两个日期之间的工作日数(含首尾)
=NETWORKDAYS(A2,B2,$H$2:$H$10)

节假日列表要单独维护,不能把周末写进节假日区域;WORKDAY/NETWORKDAYS 默认周六、周日休息。

算时间差

两个时间相减
=B2-A2

超过 24 小时的小时数
=(B2-A2)*24

显示成 [h]:mm
把单元格格式设为 [h]:mm

[h] 带方括号表示累计小时数,超过 24 小时不会归零;普通的 h:mm 只显示 0–23 的小时部分。

日期格式

自定义格式只改变显示,不改变底层值。用 TEXT(A2,"yyyy-mm-dd") 会把结果变成文本,不能再直接做日期计算。

易错点

相关条目

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么 12:00 在 Excel 里等于 0.5?
  2. EOMONTH(A2,0) 和 EDATE(A2,1) 有什么区别?
  3. 时间差超过 24 小时,为什么显示成 0:30 而不是 24:30?
答案
  1. 时间按一天的小數部分存储,12 小时是一天的 0.5。
  2. EOMONTH(A2,0) 返回 A2 所在月的最后一天;EDATE(A2,1) 返回下个月的同一天。
  3. 单元格用了 h:mm 格式,只显示 0–23 的小时部分;应改成 [h]:mm。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令