Excel日期函数大全:DATEDIF算工龄/年龄/间隔天数,一篇搞定
算工龄数月份、算年龄算不对生日、算项目天数总出错?这篇讲透Excel日期函数,重点精讲DATEDIF隐藏神器,零基础也能上手。
开头:那些年我们踩过的日期坑
你有没有遇到过这些情况:
-
HR算工龄,拿着入职日期一个月一个月掰手指数,数到眼花还怕错;
-
行政算年龄,用今年减出生年,生日没到就多算了一岁;
-
项目经理算剩余天数,结束日期直接减今天,跨月跨年就懵;
-
财务算合同到期提醒,每天翻表格挨个看,快到期的反而漏掉了。
中了以上任何一条,说明你需要系统学日期函数。特别是DATEDIF这个隐藏函数------不在函数列表里显示,却是计算工龄、年龄、间隔天数的第一神器。
本文从基础到进阶,把日期函数一次性讲透。照着公式抄,零经验也能用。
一、日期函数基础:先搞定这6个打底
讲DATEDIF之前,先搞定6个基础日期函数。它们就像积木,后面拼复杂公式全都要用。
1. TODAY函数 ------ 获取今天的日期
公式:
=TODAY()
作用:返回当前系统日期,打开文件自动更新。
示例:今天是2024/3/15,输入 =TODAY() 就会显示 2024/3/15。
注意:括号里不用填内容;每次打开自动更新为当天日期;需要固定日期直接手动输入。
2. NOW函数 ------ 获取当前日期和时间
公式:
=NOW()
作用:返回当前日期+时间,如2024/3/15 14:30:25。算天数用TODAY即可,NOW适合精确到小时的场景。
3. YEAR / MONTH / DAY ------ 提取年月日
这三个是一组,用法完全相同:
-
=YEAR(日期) ------ 提取年份,返回4位数字
-
=MONTH(日期) ------ 提取月份,返回1-12
-
=DAY(日期) ------ 提取几号,返回1-31
示例:=YEAR(\"2024/3/15\") 返回2024。A2是出生日期的话,=YEAR(A2) 得到出生年份。
4. DATE函数 ------ 拼接日期
公式:
=DATE(年, 月, 日)
作用:把分开的年月日数字拼成完整日期。
示例:=DATE(2024, 3, 15) 返回2024/3/15。
实用场景:年月日拆在不同列时用DATE拼回。如A列年、B列月、C列日,公式为 =DATE(A2,B2,C2)。
{width="5.0in" height="3.3333333333333335in"}
二、DATEDIF函数精讲:日期计算的隐藏神器
什么是DATEDIF?为什么叫隐藏函数?
DATEDIF非常特殊------不在公式插入函数列表里,输入时也没有提示,必须完整敲出来才能用。
但功能极强:专门计算两个日期相差的年、月、天数。算工龄、年龄、工期全靠它。
DATEDIF语法
公式:
=DATEDIF(开始日期, 结束日期, 单位代码)
三个参数:
-
开始日期:较早的那个日期
-
结束日期:较晚的那个日期
-
单位代码:你想要什么单位的结果(年/月/日等,用英文双引号包起来)
💡 参数要点:开始日期和结束日期顺序不能反,否则报错;单位代码必须用英文双引号包裹。
6个单位代码详解(重点!)
DATEDIF的精髓全在第三个参数------单位代码,一共有6个:
💡 记忆口诀:Y年M月D日是基础,MD只算日差不管年月,YM只算月差不管年日,YD算日差但只看一年。
单位代码 含义 返回范围 \"Y\" 相差的整年数,不足一年舍去 整数年 \"M\" 相差的整月数,不足一月舍去 整数月 \"D\" 相差的总天数 总天数 \"MD\" 日的差值,忽略年和月 0-30 \"YM\" 月的差值,忽略年和日 0-11 \"YD\" 日的差值,只忽略年 0-364
统一举例:入职日期2020/6/1,今天2024/3/15。
\"Y\" ------ 算整年差
=DATEDIF(\"2020/6/1\", \"2024/3/15\", \"Y\") → 返回 3
还没到2024年6月1日,不满第4年,所以只算3整年。
典型应用:计算周岁年龄、工作年限、服务年限等需要满年才算的场景。
\"M\" ------ 算整月差
=DATEDIF(\"2020/6/1\", \"2024/3/15\", \"M\") → 返回 45
3年36个月加9个月共45个月,还没到3月底所以不加第46个月。
典型应用:计算月数工资、按月统计项目时长、分期还款期数等。
\"D\" ------ 算总天数
=DATEDIF(\"2020/6/1\", \"2024/3/15\", \"D\") → 两个日期之间总天数
直接用结束日期减开始日期也能得到同样结果,但DATEDIF写法更规范。
\"MD\" ------ 日差(忽略年月)
=DATEDIF(\"2020/6/1\", \"2024/3/15\", \"MD\") → 返回 14
只看日:15-1=14天。常和Y、M组合,显示X年X个月零X天。
\"YM\" ------ 月差(忽略年日)
=DATEDIF(\"2020/6/1\", \"2024/3/15\", \"YM\") → 返回 9
只算月份差:从6月到次年3月差9个月。这是最常用的参数,算去掉整年后还剩几个月全靠它。
搭配Y参数使用,就能显示X年X个月的完整工龄格式,是HR最常用的组合。
\"YD\" ------ 日差(忽略年)
=DATEDIF(\"2020/6/1\", \"2024/3/15\", \"YD\") → 返回 287
忽略年份,只看一年内日期差,从6月1日到次年3月15日共287天。适合算距离下一个生日还有多少天。
DATEDIF常见坑 ⚠️
1. 开始日期 > 结束日期会报#NUM!错误
DATEDIF要求第一个参数≤第二个。不确定谁早谁晚,用MIN/MAX包一下:
=DATEDIF(MIN(A2,B2), MAX(A2,B2), \"Y\")
💡 总结:遇到日期函数报错,按这三步排查------先看是不是真日期,再看日期顺序对不对,最后检查公式拼写。
2. 日期格式不对 → #VALUE!错误
\"2024.3.15\"或\"2024年3月15日\"识别不了,必须用标准日期格式如2024/3/15。
3. 文本型日期用不了
日期左上角有绿色小三角说明是文本不是真日期。解决方法:选中→数据→分列→直接点完成。
💡 快速验证:输入=A1+1,如果报错说明是文本日期,如果能算出下一天就是真日期。
{width="5.0in" height="3.3333333333333335in"}
三、实战场景:4个高频应用,拿来就能用
讲完理论上干货------4个高频职场场景,公式直接抄。
场景1:计算员工工龄(X年X个月)
需求:根据入职日期,算到今天工龄是几年零几个月。
公式(入职日期在B列):
=DATEDIF(B2,TODAY(),\"Y\")&\"年\"&DATEDIF(B2,TODAY(),\"YM\")&\"个月\"
公式拆解:
-
DATEDIF(B2,TODAY(),\"Y\") 算出整年数
-
DATEDIF(B2,TODAY(),\"YM\") 算出去掉整年后的月数
-
& 是连接符,把数字和\"年\"\"个月\"拼起来
示例结果:3年9个月
新手提示:引号必须是英文双引号;TODAY后面有括号;显示#NAME?大概率是DATEDIF拼错了。
💡 进阶写法:如果入职日期为空想显示空白,可以加个IF判断:=IF(B2=\"\",\"\",DATEDIF(...)&\"年\"&...)
场景2:计算周岁年龄
需求:根据出生日期,算到今天的周岁年龄(生日过了才算长一岁)。
公式(出生日期在C列):
=DATEDIF(C2,TODAY(),\"Y\")
就这么简单,一个\"Y\"参数搞定。
为什么不用今年减出生年?那样会多算一岁。比如今天3月15日,生日6月1日,2024-1990=34但实际还没满34岁。DATEDIF的\"Y\"会自动判断生日过没过,非常精准。
💡 扩展:想精确到几岁几个月?用和工龄一样的公式,把入职日期换为出生日期即可。
场景3:计算项目剩余天数
需求:项目有截止日期,算距离今天还剩多少天,快到期的标红提醒。
基础公式(截止日期在D列):
=D2-TODAY()
日期格式直接相减得到天数。
友好版公式(区分逾期和未到期):
=IF(D2\<TODAY(),\"已逾期\"&(TODAY()-D2)&\"天\",\"还剩\"&(D2-TODAY())&\"天\")
效果:没到期显示还剩15天,过期显示已逾期3天。
配合条件格式标红:
选中剩余天数列→开始→办公效率工具→突出显示单元格规则→小于→输入7→选浅红填充色深红色文本→确定。剩余7天内自动标红。
场景4:合同到期自动提醒
需求:合同到期30天以内,自动显示即将到期,方便提前续签。
公式(到期日期在E列):
=IF(E2-TODAY()\<=0,\"已到期\",IF(E2-TODAY()\<=30,\"即将到期(\"&(E2-TODAY())&\"天)\",\"正常\"))
公式拆解:
-
第一层IF:到期日≤今天,显示已到期
-
第二层IF:到期日≤30天内,显示即将到期X天
-
其他显示正常
适合行政、法务、采购等需要管理大量合同的岗位。
{width="5.0in" height="3.3333333333333335in"}
四、其他实用日期函数:进阶必备
除了基础函数和DATEDIF,还有4个进阶日期函数也很好用,建议收藏。
1. EDATE ------ 推N个月后的日期
公式:
=EDATE(开始日期, 月数)
作用:算出某个日期往前或往后推几个月的日期。
示例:=EDATE(\"2024/3/15\", 3) → 2024/6/15(3个月后)
月数填负数就是往前推。常见用途:合同到期日(签约日+12个月)、试用期到期日(入职+3个月)。
💡 提示:EDATE自动处理大小月,比如1月31日加1个月会得到2月28日(或29日),非常智能。
2. EOMONTH ------ 月末日期
公式:
=EOMONTH(开始日期, 月数)
作用:返回指定月数后那个月的最后一天。
示例:=EOMONTH(\"2024/3/15\", 0) → 2024/3/31(本月最后一天)
做月报需要月末日期,用这个一键获取,不用记哪个月30天哪个月31天。
3. WORKDAY ------ 工作日推算
公式:
=WORKDAY(开始日期, 工作日天数, [节假日])
作用:往后推N个工作日(自动跳过周末)的日期。
示例:=WORKDAY(\"2024/3/15\", 5) → 2024/3/22(跳过两个周末)
常见用途:项目排期、物流到货预估、审批时限计算。
4. NETWORKDAYS ------ 计算工作日天数
公式:
=NETWORKDAYS(开始日期, 结束日期, [节假日])
作用:两个日期之间的工作日天数(自动排除周六周日)。
示例:=NETWORKDAYS(\"2024/3/1\", \"2024/3/31\") → 21(3月共21个工作日)
常见用途:实际出勤天数、项目实际工期。
五、日期函数常见5大坑,千万别踩
日期函数看起来简单,但坑特别多。新手90%的报错都来自下面这5个坑。
坑1:看起来是日期,其实是文本
最常见的坑。单元格显示2024/3/15但实际是文本,函数一算就报错。
判断方法:格式改为常规,变数字是真日期,不变是文本。
转换方法:选中→数据→分列→点完成,一秒转正。
坑2:两位年份容易理解错
输入24/3/15,Excel 效率工具可能理解为2024年也可能是1924年,取决于系统设置。
安全做法:永远用4位年份,如2024/3/15,别偷懒。
坑3:跨年度手动算不对
有些人算日期差直接年减年月减月,不够减就懵了。比如2024/3/15减2023/10/20,月3-10不够减......
正确做法:直接用DATEDIF,自动处理借位,不用操心。
坑4:中文日期格式算不了
二〇二四年三月十五日这种中文日期,Excel识别不了。
解决方法:查找替换把年月换成/,把日删掉,变成标准日期。
坑5:DATEDIF返回#NUM!错误
99%是开始日期大于结束日期。不确定谁早谁晚,用MIN/MAX包一下:
=DATEDIF(MIN(A2,B2),MAX(A2,B2),\"Y\")
结尾总结
本文从6个基础日期函数讲起,重点精讲DATEDIF的6个单位代码,实战4个高频场景,补充4个进阶函数和5个避坑点。
核心要点回顾:
-
基础6件套:TODAY/NOW获取当前日期,YEAR/MONTH/DAY拆分日期,DATE拼接日期;
-
DATEDIF是日期差第一神器,记住6个单位代码:Y年、M月、D日、MD日差忽略年月、YM月差忽略年日、YD日差忽略年;
-
工龄、年龄、剩余天数、合同到期提醒,都可用DATEDIF组合实现;
-
进阶函数:EDATE推月份、EOMONTH取月末、WORKDAY推工作日、NETWORKDAYS算工作日天数;
-
遇到报错先检查:是不是文本日期、是不是开始>结束、是不是格式不对。
日期函数是Excel实用性最强的函数之一,HR、行政、财务、项目经理几乎天天用。建议收藏本文,用的时候翻一翻,照着公式抄,很快就能熟练掌握。
作者:沈未迟
来源说明:本文首发于微信公众号「效率小本本」,经整理优化后发布于 DevToolHub。