Excel必备工具箱wdatedif函数,科学准确地计算两个日期相差月份和天数,适用于法院、检察院、司法行政机关计算剩余刑期,也适用于人事部门计算工作时长。
EXCEL必备工具箱,一款自带免费多标签的EXCEL工具箱,同时支持office和WPS,绝大部分操作可撤销。
wdatedif函数介绍:
本函数由白茶君编写(QQ779218591)
常规办法,不能准确计算两个日期相差月份和天数:
在公司人力资源部门或单位组织人事部门,有时候需要统一计算全体职工、员工的工作时长,要求两个日期的时间差以“二十一年七个月八天”或者”21年7个月8天”的样式表现;而国内司法行政机关如人民法院、检察机关、刑罚执行机关等对在押人员服刑时间、法定间隔等要素都需要一种精准和标准化的计算方式,百度提供了公式解法。
假设A2、B2为两个日期,需要计算两个日期相差的月份和天数:
常见网上公式1:=DATEDIF(A2,B2,"Y")&"年"&DATEDIF(A2,B2,"YM")&"个月"&DATEDIF(A2,B2,"MD")&"天"
常见网上公式2:=TEXT(SUM(DATEDIF(A2,B2,{"Y","YM","MD"})*{10000,100,1}),"0年00个月00天")
完善公式3:
=IF(DATEDIF(A2,B2,"y")=0,"",DATEDIF(A2,B2,"y")&"年")&IF(0=DATEDIF(A2,B2,"ym"),"",DATEDIF(A2,B2,"ym")&"个月")&IF(0=DATEDIF(A2,B2,"md"),"",DATEDIF(A2,B2,"md")&"天")
然而,上述公式有三大缺陷,第一,DATEDIF函数有致命缺陷(如负数结果),微软公司一直没有解决;第二,对“月”的定义随心所欲,导致“天”的序列值出现断点或等值现象,失去了严谨性。第三,在大规模公式计算表格中,公式太长不利于移植。
问题一:出现跳跃断点,如图例A、B处,A结果是通常采用的跨月同日法,B结果则随意转换为自然月法,导致断点发生。
问题2:负数结果
上图就是采用Excel隐函数DATEDIF,出现了不可接受的结果。
问题3:前后重复值
综上所述,大家口口相传的自然月计算法,在对大批量数据的计算中显得不那么严谨。
为此,笔者基于日差计算的长期广泛的迫切需求,构造了自定义函数 WDateDif,解决了上述问题,使得计算结果满足了唯一性、连续性的基本要求,超越了基于自然月的普通方法,体现了计算的严谨性。
WDateDif函数计算原理主要来自于《刑事诉讼司法解释》第165条,吸收了DATEDIF的优点,克服了DATEDIF的不足,主要基于跨月同日,并在特殊月份情形下,吸纳了自然月法,消除了计算断点、重复现象:
1.以月计算的期限,自本月某日至下月同日为一个月(跨月同日);
2.起算日为本月最后一日的,至下月最后一日为一个月;
3.如果以上同时存在,优先第一条执行,即如果存在跨月同日结果,按跨月同日计算。如果前二条均不存在,转而自然月法计算。如下图:
自然月法说明:1个自然月:2022年2月;29天=(1月31日-1月30日)天+28天=29天。
函数名称:
= WDateDif(起始日期,结束日期,类型值)
函数用途:适用于人民法院、人民检察院、司法行政机关计算到日余刑、间隔时间、起始时间;适用于组织人事部门、人力资源部门计算职工工作时长。
参数含义:
1、参数1(起始日期)、参数2(结束日期):可以是标准日期格式,如“2012-5-6”或“2012/5/6”,也适用excel日期函数,如wdatedif(A3,today()),也可以是点日期“2015.10.16”考虑到不同人的使用习惯,“起始日期”和“结束日期”容许二个参数位置互换,即参数1=“起始日期”、参数2=“结束日期”和参数1=“结束日期”、参数2=“起始日期”均输出相同结果。
2、参数3(类型值):
类型值=0,输出为数字型日期差,如“3年6个月5天”、“3年5天”;
类型值=1,输出为汉字型日期差,如“三年六个月五天”、“三年五天”、“六个月五天”;省略0年、0个月、0天等整差字样。
类型值=2,输出含零值的数字型日期差,如“3年0个月5天”、“0年0个月5天”、“0年11个月0天”;省略〇年、〇个月、〇天等整差字样。本类型便于某些特殊场合利用文本函数提取年值、月值、天值,以便降低难度和缩短公式的长度。
类型值=3,输出含零值的汉字型日期差,如“三年〇个月五天”、“〇年〇个月5天”、“〇年11个月〇天”;本类型用于某些特殊场合提取年值、月值、天值。
类型值=4,输出含数字型年月差,如“7年11个月”
类型值=5,输出含汉字型年月差,如“七年十一个月”;
类型值缺省,等同于类型值=0。例图如下:
更新记录:
本函数是17.42版新增功能。
17.72更新记录:
(1)增加二个类型参数用法:
类型值=4,输出含数字型年月差,如“7年11个月”
类型值=5,输出含汉字型年月差,如“七年十一个月”;
(2)参数1和参数2可以是标准日期格式“2013-8-17”,也适用excel日期函数,如wdatedif(A3,today()),也可以是点日期“2015.10.16”