为什么你工作10个月却只拿到9个月工资?

发布时间:2019-12-28 来源:网络


我们经常用DATEDIF这个隐藏函数来计算两个日期之间的天数、月份和年数,在实际工作中主要应用于员工年龄、工龄计算和生日提醒,功能不可小觑。然而,在使用这个函数过程中,你有没有发现这里面的一个Bug呢?虽然问题不大,但实际关乎大家的切身利益,比如你明明工作了10个月,却只拿9个月的薪资,为什呢?


下面我们先来看一下DATEDIF函数的语法:


DATEDIF(起始日期,结束日期,返回的时间单位代码)


时间单位代码包括:


"y"返回时间段中的整年数;

"m”返回时间段中的整月数;

"d"返回时间段中的天数;

"md”返回两个日期的天数之差,忽略年和月;

"ym“返回两个日期的月数之差,忽略年和日;

"yd”返回两个日期的天数之差,忽略年。


如下图,我们要统计离职员工在公司的实际工作月份,输入公式:=DATEDIF(H2,I2,"M"),下拉填充。



乍一看好像没什么不对,实际上这里面已经出现了错误值。



这里面有3项数据出现了问题:


1、2018/5/31到2018/11/30 实际上刚好满6个月


2、208/8/31到2018/9/30 实际上刚好满1个月


3、2018/2/28到2018/5/29 实际上不满3个月,应为2个月


为什么会出现这样的错误呢?


这里面分为两种情况,前面两项数据的起始和结束日期均为当月的最后一天,而且起始日期的天数均大于结束日期的天数,用DATEDIF函数进行计算,会认为未足月而得出错误值;


最后一项数据则是由于2月份的特殊性,起始日期也是当月最后一天,结束日期虽不足月但天数大于起始日期天数,系统计算则认为已足月,也导致了错误值的出现。


那么我们该如何来解决这个Bug


这里核心问题在于当月月末最后一天和次月第一天的关系,当起始和结束日期都为当月最后一天,我们可把天数递增一天,均变为次月的第1天进行计算。这里我们可以输入公式:

=DATEDIF(IF(DAY(H2+1)=1,H2+1,H2),IF(DAY(I2+1)=1,I2+1,I2),"M"),下拉填充即可得到正确结果。



Bug虽小,却隐藏大隐患,需及时铲除。现在,你会用DATEDIF函数了吗?