Excel 日期与时间函数:DATE、DATEDIF、WEEKDAY、WORKDAY
- 2026-11-09 23:09:36
在Excel中处理日期和时间,远不止输入“2026/3/31”这么简单。你需要计算两个日期之间的天数、判断星期几、推算N个工作日后的日期、计算年龄或工龄……这些都需要专门的日期函数。
本文将系统讲解DATE、DATEDIF、WEEKDAY、WORKDAY、NETWORKDAYS等核心日期函数的用法,并通过真实案例帮助你快速上手。
一、Excel中的日期本质
在Excel中,日期本质上是从1900年1月1日开始计算的序列数。
1900年1月1日 = 1
2026年3月31日 = 46116(因为从1900-01-01到2026-03-31一共过去了46115天,再加1)
这个特性让我们可以对日期进行加减运算:=A1+7 表示7天后的日期。
常用快捷键:
Ctrl + ;输入当前日期Ctrl + Shift + ;输入当前时间Ctrl + 1打开单元格格式,可设置为“日期”或“时间”格式
二、DATE – 构造日期
功能
将单独的年、月、日数字组合成一个标准的日期。
语法
=DATE(年, 月, 日)示例
=DATE(2026,3,31) | ||
=DATE(2026,13,1) | ||
=DATE(2026,0,15) | ||
=DATE(2026,3,0) |
实战案例:将分散的年/月/日合并
A列=2026,B列=3,C列=31:
=DATE(A1,B1,C1)实战案例:获取某个月的最后一天
要获取2026年2月的最后一天:
=DATE(2026,3,0)原理:3月0日 = 2月最后一天。
三、DATEDIF – 计算日期差(隐藏函数)
功能
计算两个日期之间的年数、月数或天数。这个函数在Excel中属于“隐藏函数”,输入时不会有智能提示,但完全可以正常使用。
语法
=DATEDIF(开始日期, 结束日期, 单位)单位代码
"Y" | ||
"M" | ||
"D" | ||
"MD" | ||
"YM" | ||
"YD" |
实战案例1:计算年龄(周岁)
A1=出生日期,B1=当前日期(或=TODAY()):
=DATEDIF(A1, B1, "Y")若需要精确到“X岁Y个月Z天”:
=DATEDIF(A1,B1,"Y") & "岁" & DATEDIF(A1,B1,"YM") & "个月" & DATEDIF(A1,B1,"MD") & "天"实战案例2:计算工龄(年+月)
入职日期在A2:
=DATEDIF(A2, TODAY(), "Y") & "年" & DATEDIF(A2, TODAY(), "YM") & "个月"注意事项
结束日期必须 ≥ 开始日期,否则返回
#NUM!"MD"、"YM"、"YD"的结果可能与直觉有微小差异,建议先用小数据测试。
四、WEEKDAY – 判断星期几
功能
返回一个数字,代表该日期是星期几。
语法
=WEEKDAY(日期, [返回类型])返回类型(常用)
| 2 | 1=星期一,2=星期二……7=星期日 | 中国(推荐) |
示例
=WEEKDAY(A1,2) | |||
=WEEKDAY(A2,2) |
实战案例1:判断周末
A1为日期,B1公式:
=IF(WEEKDAY(A1,2)>=6, "周末", "工作日")实战案例2:返回中文星期名称
=TEXT(A1, "aaaa") ' 输出“星期二”=TEXT(A1, "aaa") ' 输出“二”不需要WEEKDAY也能实现。
五、WORKDAY – 计算工作日后的日期
功能
返回指定工作日(周一至周五)天数之后的日期,可自动排除周末,也可指定节假日。
语法
=WORKDAY(开始日期, 天数, [节假日列表])天数:正数为未来,负数为过去。
节假日列表:可选,包含需要排除的假日日期的单元格区域。
示例
A1 = 2026/3/31(周二),往后推3个工作日:
=WORKDAY(A1, 3)结果:2026/4/3(周五),因为中间跳过了周六日。
实战案例:计算项目结束日期(跳过节假日)
项目开始于2026/4/1,需要10个工作日,法定假日为2026/4/6(清明):
=WORKDAY("2026/4/1", 10, C1:C10) ' C1:C10存放节假日列表六、NETWORKDAYS – 计算两个日期之间的工作日天数
功能
返回两个日期之间的完整工作日(周一至周五)天数,不含周末,可排除节假日。
语法
=NETWORKDAYS(开始日期, 结束日期, [节假日])示例
=NETWORKDAYS("2026/3/31", "2026/4/10")结果:9天(假设中间无假日,共11个自然日,去掉两个周末日)。
实战案例:计算员工当月实际出勤应计天数
已知当月1日和当月最后一天,以及公司放假列表(F列):
=NETWORKDAYS(EOMONTH(A1,-1)+1, EOMONTH(A1,0), F:F)七、其他常用日期函数速览
TODAY() | =TODAY() | |
NOW() | =NOW() | |
YEAR(date) | =YEAR("2026/3/31") | |
MONTH(date) | =MONTH(A1) | |
DAY(date) | =DAY(A1) | |
HOUR(time) | =HOUR(NOW()) | |
MINUTE(time) | ||
SECOND(time) | ||
EDATE(start, months) | =EDATE("2026/3/31", 1) | |
EOMONTH(start, months) | =EOMONTH("2026/3/31", 0)=EOMONTH("2026/3/31", 1) → 2026/4/30 |
八、综合实战案例
案例1:计算项目剩余工作日(动态)
已知:项目截止日 = 2026/5/31(B1),今天 = TODAY(),节假日列表在 H:H。
=NETWORKDAYS(TODAY(), B1, H:H)若结果为负数,表示已超期。
案例2:计算员工转正日期(入职后3个月,且必须是工作日)
入职日期 A2,转正为3个月后,若遇周末则顺延至下周一。
=WORKDAY(EDATE(A2,3)-1, 1)原理:EDATE得到3个月后的同一天,减1得到前一天,再用WORKDAY往后推1个工作日。
案例3:自动生成每月报表标题(如“2026年3月报表”)
A1 为任意日期(如2026/3/31):
=TEXT(A1, "yyyy年m月") & "报表"案例4:计算年龄精确到天,并判断是否满18周岁
出生日期 A1:
=IF(DATEDIF(A1, TODAY(), "Y")>=18, "成年", "未成年")九、常见错误及解决方法
#NUM! | ||
WEEKDAY(date,2) 得到1-7对应周一到周日 | ||
DATEVALUE 转为真日期,或直接引用日期单元格 | ||
DATEDIF 的 "M" 或 "YM" |
十、总结
DATE | |
DATEDIF"Y" / "YM" / "MD" | |
WEEKDAYTEXT(...,"aaaa") | |
WORKDAY | |
NETWORKDAYS | |
TODAY() | |
EOMONTH | |
YEARMONTH / DAY |
建议:日期计算最容易出错的是“文本型日期”和“序列数”混淆。尽量使用函数生成的日期,或者用 DATEVALUE 将文本转为真日期。
掌握这些函数后,你可以轻松处理考勤、项目排期、年龄计算、报表自动生成等场景
恭喜你又学到最后,如果你喜欢感觉有帮助可以点【赞】和【关注】,希望我们共同进步。