大名鼎鼎的DATEDIF函数,用于计算两个日期之间的天数、月数或年数。虽然是隐藏函数,但是名气却不小。在计算员工工龄、计算入职时间、计算人员年龄等等方面有着非常广泛的应用。
函数语法是:
DATEDIF(开始日期,结束日期,返回的信息类型)
比如说,要计算工龄有几个月,公式是这样的:
=DATEDIF("2012-12-1","2016-5-2","m")
就是计算12年12月日至2016年5月2日有多少个完整的月份。
要计算年龄有多少岁,公式是这样的:
=DATEDIF("1988-6-1","2016-5-2","y")
就是计算1988年6月1日出生的员工到2016年5月2日有多少个整年数。
DATEDIF虽然功能强大,而且简单易用,但是有时候也会有点小脾气,今天就和大家分享一下这个函数在使用中遇到的问题。
如下图,要计算员工入职到离职期间一共工作了多少个月,但是红线框出的两条计算结果,明显和预期不一致了。
副班小污同志辛辛苦苦工作了一个月,但却啥都不算,不带这么玩的,这是严重的拖欠农民工的工资啊。
仔细观察,会发现只有当DATEDIF的结束日期是当月的最后一天,而开始日期的天数比结束日期的天数大的时候,计算结果会少一个月。
既然找到了问题,解决就方便了,把原来的公式修正一下:
=DATEDIF(C2,D2,"m")+AND(DAY(C2)>DAY(D2),D2=EOMONTH(D2,0))
这个公式看起来挺长的,其实就是多了一个简单的判断,用AND函数链接两个条件:
DAY(C2)>DAY(D2)是判断开始日期的天数是否大于结束日期的天数
D2=EOMONTH(D2,0)是判断结束日期是否当月的最后一天
当开始日期的天数大于结束日期的天数,并且结束日期是否当月的最后一天时,就在DATEDIF公式结果上加1个月,否则就保持DATEDIF的结果。