功能强大的Excel提供了众多日期计算函数,为我们的计算提供了方便。计算两个日期间的间隔时间最简单的方法就是,两个日期值直接相减,相减的结果是间隔的自然日。
如果需要计算两个日期之间间隔的工作日,可以使用networkdays(start_date,end_date,holidays)函数:三个参数分别是起始日期、结束日期、作为特定假日的一个或多个日期。返回的结果是排除两个日期之间的双休日和指定假日的完整工作日数值,是个整数,取整方法是向上取整,即不足一日按一日计算。但是该函数的计算结果与我们的实际经验有差异,例如:networkdays("2011-1-5 17:47:00","2011-1-7 15:56:00")=3天,按我们常理理解应该是2天,也就是说该函数把当天也计入了的。如果单纯在其结果上减去1天,也不行。
还有,如果我们需要的是精确结果,未取整的数值,这个函数肯定不行,又该使用什么函数呢?好像Excel没有直接提供这样的函数,那么我们只能采用变通的方法进行处理,下面介绍一下我的思路和方法:
首先再介绍另外一个工作日函数workday(start_date,days,holidays):计算起始日期之前或之后相隔指定工作日的某一日期的日期值。它也带有3个参数:start_date表示进行日期,days为start_date之前(负)或之后(正)不含周末及节假日的天数,holidays表示作为特定假日的一个或多个日期。
该思路是利用日期值直接相减得到精确天数,保留该精度进行计算,再加上用间接方法剔除非工作日,得到精确计算结果。思路:
①用结束时间减去开始时间得到两个日期间隔的自然日(N);
②用workday函数计算从开始时间起间隔N个工作日后的日期值(END),该日期再加上N的小数部分;
③用新得到的日期END减去结束时间,得到开始时间与结束时间间的节假日(H);
④用N - H得到开始时间到结束时间间隔的工作日。
实例:得到开始时间2010-12-27 10:36和结束时间2011-1-7 14:06之间间隔的工作日数,保留小数。
① = "2011-1-7 14:06 " - "2010-12-27 10:36" = 11.1458
② = WORKDAY("2011-1-7 14:06 ",INT(11.1458))+(11.1458-INT(11.1458)) = "2011-1-11 3:30";
③ = "2011-1-11 3:30" - "2011-1-7 14:06 " = 3.5583;
④= 11.1458 - 3.5583 = 7.5875。
结果为7.5875天。
|
有话要说...