admin管理员组

文章数量:1540710

2024年6月13日发(作者:)

Datedif函数全面解析和BUG分析

DATEDIF函数是一个隐藏的日期函数,一般来说,用这个函数会比直接使用日期运

算来的简单,但是这个函数并不是那么可靠,偶尔会犯点小毛病。所以就来说,一般情况

下都会用其他方式来替代实现它的功能。

从不同的角度来看,Datedif函数都是一个比较特殊的函数:

1)在多个Excel版本中,Datedif函数都是隐藏函数,没有出现在函数列表中,Excelxx

中的公式自动完成功能也不会自动生成这个函数名称,甚至在多个版本中的帮助文件中都

找不到这个函数的踪影。

2)在多个版本中,Datedif函数的算法发生了改变,据我目前所知,ExcelxxSP3、

ExcelxxSP1、ExcelxxSP2以及还未正式上市的Excelxx中,这个函数的运算结果都有所不

同。更早期的版本尚无研究。

3)工作表函数Datedif与VBA中的函数Datediff也不相同。

本文将主要以ExcelxxSP2版本中的Datedif函数运算作为研究对象,并附上

ExcelxxSP3的相应结果作为参考。请使用正确的版本打开附件,否则将会出现不同的运算

结果。

Excel早期版本的帮助文件中,对Datedif函数的解释如下:

DATEDIF(start_date,end_date,unit)

参数start_date代表时间段内的第一个日期或起始日期。参数end_date代表时间段

内的最后一个日期或结束日期。参数unit为所需信息的返回时间单位代码。各代码对应的

含义如下:

"y"——时间段中的整年数。

"m"——时间段中的整月数。

"d"——时间段中的天数。

"md"——start_date与end_date日期中天数的差。忽略日期中的月和年。

"ym"——start_date与end_date日期中月数的差。忽略日期中的日和年。

"yd"——start_date与end_date日期中天数的差。忽略日期中的年。

这6个unit参数看上去极其简单,无非就是年月日的差值运算,但其实里面包含了

许多玄机,下面将针对这6种unit代码分别进行详解:

以下假定start_date存放于A2单元格内,end_date存放于B2单元格内

1,=Datedif(A2,B2,"Y")

此参数含义为返回时间段内的整年数,

1)所谓“整年”的判断包含了两个日期值(m-d)的大小判断,假定A2与B2相差一年,

本文标签: 函数代码版本参数假定