在Excel中处理日期和时间,远不止输入“2026/3/31”这么简单。你需要计算两个日期之间的天数、判断星期几、推算N个工作日后的日期、计算年龄或工龄……这些都需要专门的日期函数。
本文将系统讲解DATE、DATEDIF、WEEKDAY、WORKDAY、NETWORKDAYS等核心日期函数的用法,并通过真实案例帮助你快速上手。
在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(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月最后一天。
计算两个日期之间的年数、月数或天数。这个函数在Excel中属于“隐藏函数”,输入时不会有智能提示,但完全可以正常使用。
=DATEDIF(开始日期, 结束日期, 单位)"Y" | ||
"M" | ||
"D" | ||
"MD" | ||
"YM" | ||
"YD" |
A1=出生日期,B1=当前日期(或=TODAY()):
=DATEDIF(A1, B1, "Y")若需要精确到“X岁Y个月Z天”:
=DATEDIF(A1,B1,"Y") & "岁" & DATEDIF(A1,B1,"YM") & "个月" & DATEDIF(A1,B1,"MD") & "天"入职日期在A2:
=DATEDIF(A2, TODAY(), "Y") & "年" & DATEDIF(A2, TODAY(), "YM") & "个月"结束日期必须 ≥ 开始日期,否则返回 #NUM!
"MD"、"YM"、"YD" 的结果可能与直觉有微小差异,建议先用小数据测试。
返回一个数字,代表该日期是星期几。
=WEEKDAY(日期, [返回类型])| 2 | 1=星期一,2=星期二……7=星期日 | 中国(推荐) |
=WEEKDAY(A1,2) | |||
=WEEKDAY(A2,2) |
A1为日期,B1公式:
=IF(WEEKDAY(A1,2)>=6, "周末", "工作日")=TEXT(A1, "aaaa") ' 输出“星期二”=TEXT(A1, "aaa") ' 输出“二”不需要WEEKDAY也能实现。
返回指定工作日(周一至周五)天数之后的日期,可自动排除周末,也可指定节假日。
=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("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 |
已知:项目截止日 = 2026/5/31(B1),今天 = TODAY(),节假日列表在 H:H。
=NETWORKDAYS(TODAY(), B1, H:H)若结果为负数,表示已超期。
入职日期 A2,转正为3个月后,若遇周末则顺延至下周一。
=WORKDAY(EDATE(A2,3)-1, 1)原理:EDATE得到3个月后的同一天,减1得到前一天,再用WORKDAY往后推1个工作日。
A1 为任意日期(如2026/3/31):
=TEXT(A1, "yyyy年m月") & "报表"出生日期 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 将文本转为真日期。
掌握这些函数后,你可以轻松处理考勤、项目排期、年龄计算、报表自动生成等场景
恭喜你又学到最后,如果你喜欢感觉有帮助可以点【赞】和【关注】,希望我们共同进步。