datedif函数的用法

datedif函数的用法,第1张

datedif函数有三个参数:既然datedif函数的作用是计算两个日期之间的年数、月数、天数。那一定要有起始时间和结束时间,还有告诉函数要求的是年数,月数还是天数的条件即让函数返回的类型了。所以,这三个参数就比较容易理解了。

第一个参数start_date:起始时间

第二个参数end_date:结束时间

第三个参数unit:函数返回的类型

DATEDIF函数是Excel中的一个隐藏函数,它可以用来计算两个日期之间的年数、月数、天数等时间差。该函数有三个参数:起始日期、结束日期和返回的信息类型。其中,返回的信息类型包括y(年)、m(月)、d(日)、ym(年月差)、md(月日差)和yd(日差)1。 例如,要计算2020年1月1日出生的人的年龄,可以使用公式“=DATEDIF(2020/1/1,TODAY(),y)”。 此外,也可以通过DATEDIF函数分别计算两个日期之间的整年数、整月数、整日数等

Datedif 是计算两个日期之间相差的时间,这个时间可以是年,月,天,其函数结构为

DATEDIF(start_date,end_date,unit)

start_date表示的是起始时间。

end_date表示的是结束时间。

unit表示的是返回的时间代码,是天、月、年,在函数中需要输入英文双引号下的"D","M","Y"来表示,例如:

1计算出生日期为2000-8-1的年龄

公式: =DATEDIF("2008-8-1",TODAY(),"Y") 

2计算出生日期为2000-8-1到2010-8-1共有几个月

公式: =DATEDIF("2008-8-1",2010-8-1,"M") 

1

Excel中不存在DATEIF函数。

2

Excel中存在一个隐藏函数DATEDIF,但是并非“DATEIF”。

3

任何函数书写错误都会返回#NAME

错误。

  DATEDIF函数是Excel隐藏函数,在帮助和插入公式里面没有。

返回两个日期之间的年\月\日间隔数。常使用DATEDIF函数计算两日期之差。

  语法:DATEDIF(start_date,end_date,unit)

4

  Start_date

为一个日期,它代表时间段内的第一个日期或起始日期。

5

  End_date

为一个日期,它代表时间段内的最后一个日期或结束日期。

6

  Unit

为所需信息的返回类型。

  注:结束日期必须大于起始日期

  下面举个小例子:在日常工作中非常实用。

  假如A1单元格写的也是一个日期,那么下面的三个公式可以计算出A1单元格的日期和今天的时间差,分别是年数差,月数差,天数差。注意下面公式中的引号和逗号括号都是在英文状态下输入的。

  =DATEDIF(A1,TODAY(),"Y")计算年数差

  =DATEDIF(A1,TODAY(),"M")计算月数差

  =DATEDIF(A1,TODAY(),"D")计算天数差

  "Y"

时间段中的整年数。

  "M"

时间段中的整月数。

  "D"

时间段中的天数。

  "MD"

start_date

end_date

日期中天数的差。忽略日期中的月和年。

  "YM"

start_date

与end_date

日期中月数的差。忽略日期中的年。

  "YD"

start_date

end_date

日期中天数的差。忽略日期中的年。

md两日期中天数的差,忽略日期中的月和年,yd两日期中天数的差,忽略日期中的年。

DATEDIF函数的用途是计算两个日期之间的天数、月数或年数。语法:datedif(起始日期,结束日期,返回类型)。其中的返回类型:y代表整年,m代表整月,d代表天数。

Datedif函数全面解析和BUG分析

 DATEDIF函数是一个隐藏的日期函数,一般来说,用这个函数会比直接使用日期运算来的简单,但是这个函数并不是那么可靠,偶尔会犯点小毛病。所以就我来说,一般情况下都会用其他方式来替代实现它的功能。

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

 1)在多个Excel版本中,Datedif函数都是隐藏函数,没有出现在函数列表中,Excel2007中的公式自动完成功能也不会自动生成这个函数名称,甚至在多个版本中的帮助文件中都找不到这个函数的踪影。

 2)在多个版本中,Datedif函数的算法发生了改变,据我目前所知,Excel2003 SP3、Excel2007 SP1、Excel2007 SP2 以及还未正式上市的Excel 2010中,这个函数的运算结果都有所不同。更早期的版本尚无研究。

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

 本文将主要以Excel 2007 SP2版本中的Datedif函数运算作为研究对象,并附上Excel 2003 SP3的相应结果作为参考。请使用正确的版本打开附件,否则将会出现不同的运算结果。

 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相差一年,如果B2的日期值小于A2的日期值,则不满一整年;如果B2的日期值大于等于A2的日期值,则可以记为一整年。

 2)对于包含闰年的情况,不影响日期值大小的判断,例如A2为闰年的2月29日,则B2为闰年的2月29日及以后或非闰年的3月1日及以后都可以判断为大于等于A2日期。

 综合以上算法解释,这个参数的算法可以表示为以下的公式:

 =YEAR(B2)-YEAR(A2)-1+(DATE(YEAR(B2),MONTH(A2),DAY(A2))<=B2)

 或

 =YEAR(B2)-YEAR(A2)-1+(A2<=DATE(YEAR(A2),MONTH(B2),DAY(B2)))

 2,=Datedif(A2,B2,"M")

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

 要判断整月数,也是与A2、B2的所在月份及日期相关。

 此参数的算法为:将B2、A2相减得到的天数记为Days1,从A2开始到B2的前一个月的所有月份的天数和值记为Days2,如果Days1大于等于Days2,则满足最后一个月的整月条件,否则则不足最后一个月的整月。

 换言之,使用此参数时,首先计算前后日期之间的差值,然后以起始月到(中止月-1)之间的整月天数作为计算“整月”的依据,差值大于或等于整月天数的,函数结果就是(中止月-起始月);如果差值小于整月天数,函数结果就是(中止月-起始月-1)。

 综合以上算法解释,这个参数的算法可以表示为以下的公式:

 =(YEAR(B2)-YEAR(A2))12+MONTH(B2)-MONTH(A2)-(B2-A2<(TEXT(B2,"yyyy-m-\1")-TEXT(A2,"yyyy-m-\1")))1

 关于此参数算法的讨论,可参考以前的一个老帖:http://clubexcelhomenet/viewthreadphptid=165589

 3,=Datedif(A2,B2,"D")

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

 这个参数算法最简单,实质就是两个Date相减得到的天数差,其算法可以表示为以下的公式:

 =B2-A2

 4,=Datedif(A2,B2,"MD")

 此参数含义为返回时间段内的天数,忽略月和年。

 虽然说“忽略”月和年,但实际上当B2的day小于A2的day时,两者的日期差为负数,需要借位相减才能得到正数。如何借位,向谁借位就涉及到了两个日期的所在月份及其年份。

 此参数算法包含以下几部分:

 1)当B2的day大于等于A2的day时,可直接将两者的day相减得到结果。

 例如A2为2003年3月4日,B2为2004年1月9日,其中的B2的day为9,A2的day为4,则函数结果为9-4=5。

 2)当B2的day小于A2的day时,以B2所在日期作为基准,将B2减去Date(B2所在年份、B2的前一个月份、A2的day)所得到的差值为结果。

 例如A2为2003年3月4日,B2为2004年2月3日,则将B2减去2004年1月4日的天数差作为函数结果。假如B2的月份为1月,则其前一个月份为前一年的12月。

 3)此参数在Excel 2007 SP2版本中包含bug,当满足上面第二个条件且B2日期为闰年的1月份日期时,函数结果会偏大164。这个bug在Excel2003 SP3版本中不存在,但在目前尚未发布的Excel 2010中仍有这个问题存在,只不过那个版本中的差值为113。这个莫名其妙的数值如何出现的,目前暂时没搞清楚。

 4)此参数包含的另一个问题可能不能算bug,但在各个版本中都存在,由于第二条算法的原因,当A2的day为29、30、31且B2的月份为3月份时,由于B2的前一个月份即2月份中没有29号、30号、31号,Date(B2所在年份、B2的前一个月份、A2的day)会由Excel自动将这样的date转换为3月1日、3月2日、3月3日,由此产生误差会出现0和负数。对于这样一个计算两个日期差的函数来说,出现负数好像有点不太合理。

 例如,A2日期为2003年5月31日,B2日期为2005年3月1日,date(2005,2,31)=2005年3月3日,因此B2与此日期相减得到结果为-2。

 基于第4点的问题,个人认为有以下两种算法可能会更合理一些:

 I)当day(B2)

 =IF(DAY(B2)-DAY(A2)>=0,DAY(B2)-DAY(A2),B2-TEXT(B2,"yyyy-m-\1")+DATE(YEAR(A2),MONTH(A2)+1,1)-A2)

 II)当day(B2)

 =IF(DAY(B2)-DAY(A2)>=0,DAY(B2)-DAY(A2),MAX(B2-DATE(YEAR(B2),MONTH(B2)-1,DAY(A2)),0))

 当然,这两种方法只是本人的建议,仅供参考。

 综合以上算法解释,这个参数在不够减的时候借位是以B2为基准的,这个参数的算法可以表示为以下的公式:

 =IF(DAY(B2)-DAY(A2)>=0,DAY(B2)-DAY(A2),B2-DATE(YEAR(B2),MONTH(B2)-1,DAY(A2))+164(TEXT(DATE(YEAR(B2),MONTH(B2)+1,29),"m-d")="2-29"))

 其中包含下划线的部分是对上面第三点中提到的闰年bug的模拟。如果要排除闰年的错误,则可以使用下面的公式:

 =IF(DAY(B2)-DAY(A2)>=0,DAY(B2)-DAY(A2),B2-DATE(YEAR(B2),MONTH(B2)-1,DAY(A2)))

 关于这个参数算法的讨论,还在这个帖子中进行过:http://clubexcelhomenet/viewthreadphptid=357741

 5,=Datedif(A2,B2,"YM")

 此参数含义为返回时间段内的整月数,忽略日和年。

 这里提到了“忽略”日,但实际与参数“M”一样,还是有关日期的相关计算。这个参数的算法实际上与参数“M”的算法一致,只是忽略其中年份差中所包含的月份数。

 其算法可以表示为以下的公式,其中引用了Datedif函数的“M”参数方便公式编写:

 =MOD(DATEDIF(A2,B2,"m"),12)

 6,=Datedif(A2,B2,"YD")

 此参数含义为返回时间段内的天数,忽略其中的年。

 这个参数的算法比较复杂,情况比较多,简单地说包括以下几个重点:

 1)当B2月份为3月份且B2的day大于等于A2的day时,两者相减是以A2的所在年份为基准的(如果够减,则以[A2的年份&B2的日期]与A2相减;如果不够减,则以[A2年份+1&B2的日期]与A2相减)

 2)当B2月份为3月份且B2的day小于A2的day时,两者相减是以B2的所在年份为基准的(如果够减,则以B2与[B2的年份&A2的日期]相减;如果不够减,则以B2与[B2年份-1&A2的日期]相减)

 3)当B2的月份不是3月份时,两者相减是以A2的所在年份为基准的,相减方式同第一条。

 4)当B2的day小于A2的day,且B2日期是闰年的1月份日期,且B2与A2日期不直接够减时,存在着与“MD”参数类似的闰年bug,函数结果偏大164。这个bug在Excel2003的SP3中不存在,但在Excel 2010中依旧存在,且差值变为113。

 综合以上算法解释,这个参数的算法可以表示为以下的公式(上面的文字不好理解,如果能看懂下面的公式则比较容易理解上述算法):

 =IF(--(TEXT(B2,"!0!0-m-d"))>=--(TEXT(A2,"!0!0-m-d")),IF((DAY(B2)

 其中包含下划线的部分为闰年bug的模拟,如果希望排除闰年的错误,可以将这部分内容去除。

;

今天给大家分享一个日期函数datedif函数,主要用来计算日期之间的差,在Excel中也经常会用到,可以具体的计算时间差。

Dateif函数中常用到的单位:Y=年,M=月,D=日。

1、计算年数差

计算两个日期之间相隔几年。

公式:=datedif(A2,B2,”Y”)

2、计算月数差

计算两个日期之间相隔的月份,只需要将公式中的参数Y改为m即可。

公式为:=datedif(A2,B2,”M”)

3、计算天数

获取两个日期之间相差的天数,同样修改公式的参数Y为D即可。

公式为:=datedif(A2,B2,”d”)

4、获取两个日期的周数

获取周数的情况下,只要将获取天数的日期公式下除以7就可以计算周数。然后再修改设置单元格格式,改为数值,最后将小数点改为0即可。

公式:=datedif(A2,B2,”M”)/7

5、获取具体的相隔年月日

计算两个日期相隔的具体年月日。公式:

=DATEDIF(A2,B2,"Y")&"年"&DATEDIF(A2,B2,"Ym")&"个月"&DATEDIF(A2,B2,"md")&"日"

其中使用到了连接符&,用到了单位y、ym、md。

以上是小编为大家分享的关于datedif函数Excel函数计算时间差的相关内容,更多信息可以关注环球青藤分享更多干货

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11669732.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存