Datedif函数全面解析和BUG分析

合集下载

hive内置时间函数datediff,这次总算搞清楚了

hive内置时间函数datediff,这次总算搞清楚了

hive内置时间函数datediff,这次总算搞清楚了刚接触数仓时,对hive中sql内置的一些时间函数的用法总是用的模糊两可,每次需要用到的是总是得查api,今天把这3个容易出错的日期内置函数简单总结下,算是一次学习笔记,加深印象,后面需要用到的时候就不用再去翻看api了。

1.日期比较函数•datediff语法:•datediff(string enddate,string startdate)返回值: int说明: 返回结束日期减去开始日期的天数。

例如:•select datediff('2022-12-31','2022-12-20');执行结果:11-- 2022年只剩11天了•select datediff('2022-12-20','2022-12-31');执行结果:-11需要注意的是datediff两个日期必须是'yyyy-MM-dd'的格式,否则执行结果会是NULL例如:•select datediff('20221220','20221231');执行结果:NULL而在mysql中,•select datediff('20221220','20221231');这种写法是支持的,执行结果 -11。

2.日期增加函数•date_add语法:•date_add(string startdate, intdays)返回值: string说明: 返回开始日期startdate增加days天后的日期。

例如:•select date_add('2022-12-20',11);执行结果:2022-12-31-- 还有11天2022年就过去了需要注意的是intdays 可以是正数、也可以是负数,正数代表加,负数代表减。

不过我们可以不用负数,日期有增加函数,自然有对应的减少函数3.日期减少函数•date_sub语法:•date_sub (string startdate,int days)返回值: string说明: 返回开始日期startdate减少days天后的日期。

DateDiff函数详解

DateDiff函数详解

DateDiff函数详解DateDiff 函数详解描述返回两个⽇期之间的时间间隔。

语法DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]])DateDiff 函数的语法有以下参数:interval 必选。

字符串表达式,表⽰⽤于计算 date1 和 date2 之间的时间间隔。

有关数值,请参阅“设置”部分。

date1, date2 必选。

⽇期表达式。

⽤于计算的两个⽇期。

firstdayofweek 可选。

指定星期中第⼀天的常数。

如果没有指定,则默认为星期⽇。

有关数值,请参阅“设置”部分。

firstweekofyear 可选。

指定⼀年中第⼀周的常数。

如果没有指定,则默认为 1 ⽉ 1 ⽇所在的星期。

有关数值,请参阅“设置”部分。

设置interval 参数可以有以下值:yyyy 年q 季度m ⽉y ⼀年的⽇数d ⽇w ⼀周的⽇数ww 周h ⼩时m 分钟s 秒firstdayofweek 参数可以有以下值:vbUseSystem 0 使⽤区域语⾔⽀持 (NLS) API 设置。

vbSunday 1 星期⽇(默认)vbMonday 2 星期⼀vbTuesday 3 星期⼆vbWednesday 4 星期三vbThursday 5 星期四vbFriday 6 星期五vbSaturday 7 星期六firstweekofyear 参数可以有以下值:vbUseSystem 0 使⽤区域语⾔⽀持 (NLS) API 设置。

vbFirstJan1 1 由 1 ⽉ 1 ⽇所在的星期开始(默认)。

vbFirstFourDays 2 由在新年中⾄少有四天的第⼀周开始。

vbFirstFullWeek 3 由在新的⼀年中第⼀个完整的周开始。

说明DateDiff 函数⽤于判断在两个⽇期之间存在的指定时间间隔的数⽬。

例如可以使⽤ DateDiff 计算两个⽇期相差的天数,或者当天到当年最后⼀天之间的星期数。

datedif函数的详细用法

datedif函数的详细用法

datedif函数的详细用法datedif函数用于计算两个日期之间的相差时间,它可以计算跨月份或年份的日期,返回具体的天数。

该函数的语法如下:DATEDIF(开始日期,结束日期,单位)。

开始日期和结束日期:指定要计算的日期或日期时间,格式可以是字符串、数字和引用公式等。

单位:指定要计算的时间单位,可选项有“Y”表示年份、“M”表示月份、“D”表示天数、“MD”表示月内天数、“YM”表示月跨年度、“YD”表示年内天数。

使用datedif函数时,应小心开始日期和结束日期的顺序。

一般情况下,日期应当按照开始日期放在前面,结束日期放在后面。

若只想计算两个日期之间的实际天数,可以直接利用DATEDIF函数,例如,计算2017年1月1日到2017年1月31日之间的天数,则可以用datedif函数:=DATEDIF (“2017-1-1”,“2017-1-31”,“D”),该函数的返回值为30。

另外,如果想要计算单月天数(由开始日期和结束日期来决定),就要使用MD单位,例如,计算2017年1月2日到2017年1月31日之间的天数,可以用:=DATEDIF("2017-1-2","2017-1-31","MD"),该函数的返回值也是30。

如果想要计算两个日期之间月份数量,则可以用月份单位M,例如,计算2017年1月1日至2017年12月31日之间的月份,可以用:=DATEDIF ("2017-1-1","2017-12-31","M"),该函数的返回值为11。

最后,若想要计算两个日期之间的年份数量,则可以使用Y单位,例如,计算2017年1月1日至2018年3月25日之间的年份数量,可以用:=DATEDIF ("2017-1-1","2018-3-25","Y"),该函数的返回值为1.。

datedif函数的用法举例

datedif函数的用法举例

在Excel的数学函数中,DATEDIF函数是一个十分有用的工具,它可以用于计算两个日期之间的间隔。

在本文中,我们将探讨DATEDIF函数的用法,并举例说明其在实际工作中的应用。

我们来了解一下DATEDIF函数的基本语法。

DATEDIF函数的语法如下:```=DATEDIF(start_date, end_date, unit)```其中,start_date是开始日期,end_date是结束日期,unit是日期间隔的单位。

在unit参数中,可以使用以下几种单位:- "Y":表示年份;- "M":表示月份;- "D":表示天数;- "MD":计算end_date与start_date之间的天数,不足一个月的部分不计算在内;- "YM":计算end_date与start_date之间的整月数,不计算天数;- "YD":计算end_date与start_date之间的天数,不计算整月的部分。

接下来,我们将通过具体的例子来说明DATEDIF函数的用法。

假设我们有两个日期,分别为开始日期"2019/01/01"和结束日期"2021/12/31",我们想要计算这两个日期之间的间隔。

我们可以使用如下公式:```=DATEDIF("2019/01/01", "2021/12/31", "Y")```这个公式将返回开始日期和结束日期之间的整年数。

通过这个例子,我们可以看到DATEDIF函数的灵活性和方便性,可以轻松地计算出任意两个日期之间的间隔。

在实际工作中,DATEDIF函数也经常被用于计算芳龄、工龄等需要精确计算日期间隔的场景。

我们可以使用DATEDIF函数来计算一个人的芳龄:```=DATEDIF("1990/01/01", TODAY(), "Y")```通过这个公式,我们可以得到当前日期与指定日期之间的整年数,从而精确地计算出这个人的芳龄。

Excel中的日期函数利用DATEDIF计算日期差值

Excel中的日期函数利用DATEDIF计算日期差值

Excel中的日期函数利用DATEDIF计算日期差值在Excel中,日期函数是非常常用的。

其中,DATEDIF函数是一种用于计算日期差值的特殊函数。

本文将介绍如何通过DATEDIF函数来计算与日期相关的差值。

一、DATEDIF函数的基本格式DATEDIF函数的基本格式如下:=DATEDIF(开始日期, 结束日期, "差值单位")其中,开始日期和结束日期是要计算差值的日期范围,而差值单位则决定了要计算的是哪种差值,例如天、月、年等。

二、差值单位的选择在DATEDIF函数中,可以通过指定不同的差值单位来计算不同的日期差值。

以下是常见的差值单位及其对应的参数:1. "d":计算天数差值2. "m":计算月数差值3. "y":计算年数差值4. "md":计算去除整年后的月数差值5. "yd":计算去除整年后的天数差值6. "ym":计算去除整年后的月数差值三、计算日期差值的示例下面通过几个示例来具体说明DATEDIF函数的使用方法。

示例一:计算天数差值假设开始日期为2022年1月1日,结束日期为2022年1月10日。

在一个单元格中输入以下公式:=DATEDIF(DATE(2022, 1, 1), DATE(2022, 1, 10), "d")按下回车后,Excel会显示出这两个日期之间的天数差值,即9天。

示例二:计算月数差值假设开始日期为2022年1月1日,结束日期为2023年3月1日。

在一个单元格中输入以下公式:=DATEDIF(DATE(2022, 1, 1), DATE(2023, 3, 1), "m")按下回车后,Excel会显示出这两个日期之间的月数差值,即14个月。

示例三:计算年数差值假设开始日期为2020年1月1日,结束日期为2022年1月1日。

excel中datedif函数使用

excel中datedif函数使用

excel中datedif函数使用
其中,start_date为起始日期,end_date为结束日期,unit为计算单位。

unit可以是以下三个取值之一:
'd'表示计算两个日期之间的天数差;
'm'表示计算两个日期之间的月数差;
'y'表示计算两个日期之间的年数差。

需要注意的是,DATEDIF函数在Excel2013及以后版本中已经被弃用,但仍然可以使用。

另外,在使用DATEDIF函数时,需要确保起始日期在结束日期之前,否则函数将返回错误值。

以下是使用DATEDIF函数计算天数、月数和年数之差的示例: =DATEDIF(A2,B2,'d') //计算A2到B2之间的天数差
=DATEDIF(A2,B2,'m') //计算A2到B2之间的月数差
=DATEDIF(A2,B2,'y') //计算A2到B2之间的年数差使用DATEDIF函数可以方便地计算日期差,节省了手动计算的时间和精力。

- 1 -。

运用方法excel datedif函数

运用方法excel datedif函数excel中datedif函数的运用方法:exceldatedif函数在excel中datedif函数的运用方法如下:函数语法:datedif(start_date,end_date,unit)。

参数1:start_date,则表示初始日期。

参数2:end_date,表示结束日期。

参数1和参数2可以就是拎引号的文本串成(比如:"-1-1")、系列号或者其他公式或函数的结果。

参数3:unit为所需信息的返回时间单位代码。

各代码含义如下:"y"回到时间段中的整年数。

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

"d"回到时间段中的天数。

"md”参数1和2的天数之差,忽略年和月。

"ym“参数1和2的月数之差,忽略年和日。

"yd”参数1和2的天数之差,忽略年。

按照月、日计算天数。

1、利用datedif排序差距天数。

c2单元格计算2个日期间的实际天数。

=datedif(a2,b2,"d")d2单元格按照忽略年份来计算天数。

=datedif(a2,b2,"yd")e2单元格按照忽略年份与月份计算相差天数。

=datedif(a2,b2,"md")2、利用datedif函数计算周岁。

在e5单元格输出公式:=datedif(date(left(c5,4),mid(c5,5,2),right(c5,2)),today(),"y")&"周岁",表明:date函数用作将文本则表示的出生日期切换为真正的出生年月日。

1个函数搞定所有Excel日期间隔计算神秘的DATEDIF函数详解

1个函数搞定所有Excel日期间隔计算神秘的DATEDIF函数详解函数定义:以指定的'单位'进行天数计算,通过更改'单位',可以进行6种类型天数的计算.使用格式:DATEDIF(开始日期,结束日期,'y');DATEDIF(开始日期,结束日期,'m')DATEDIF(开始日期,结束日期,'d');DATEDIF(开始日期,结束日期,'ym');DATEDIF(开始日期,结束日期,'yd');DATEDIF(开始日期,结束日期,'md')格式简义:DATEDIF(开始日期,结束日期,要计算的单位)参数定义:开始日期指定表示日期的数值(序列号值)或单元格引用.'开始日期'的月份被视为'0'进行计算结束日期指定序列号值或单元格引用.y:计算满年数,返回值为0以上的整数;m:计算满月数,返回值为0以上的整数;d:计算满日数,返回值为0以上的整数;ym:计算不满一年的月数,返回值为1~11之间的整数;yd:计算不满一年的天数,返回值为0~365之间的整数;md:计算不满一个月的天数,返回值为0~30之间的整数.要点:不能从'插入函数'对话框中输入(隐藏函数).在使用时必须直接键盘输入单元格中.注意事项:当start_date或end_date中指定的值无法识别为日期时返回错误值'#VALUE!'.当返回值为负数时,或者y、m、d、ym、yd、md参数没有用双引号括住时,返回错误值'#NAME!'鸣谢:如果觉得文章对你有帮助记得关注点赞转发和评论哦!表格定制服务可加微信EXCEL880AExcel无理论纯实战项目实操。

函数365之DATEDIF函数:你常说一日不见如隔三秋,可是你连DATEDIF都不会又怎能。。。

函数365之DATEDIF函数:你常说一日不见如隔三秋,可是你连DATEDIF都不会又怎能。

1函数名称:DATEDIF2函数作用DATEDIF函数可用于返回两个日期的间隔数,可以是间隔天数,或者间隔月数,也可以是间隔年数。

3函数语法DATEDIF(开始日期,结束日期,间隔类型)4注意事项1、DATEDIF函数是Excel函数里的隐藏函数,在帮助中是查询不到的,该函数有3个参数,均为必选参数;2、第1、第2参数都必须为日期或表示日期的序列号,且第2参数必须大于等于第1参数,否则结果为#NUM!错误值;3、第3参数表示计算时要返回的结果类型,主要有以下结果类型;应用实例实例1下表为某公司的采购跟踪表,要求根据采购日期和付款天数,判断截止今天是否已经超期,如D列所示。

函数公式D2单元格输入 =IF(C2-DATEDIF(B2,TODAY(),'D')>0,'','超期'),公式下拉即可解释说明1、根据要求首先我们要计算采购日期与今天间隔的天数,用DATEDIF函数DATEDIF(B2,TODAY(),'D'),第三参数用'D',今天用TODAY 表示;2、用付款天数减去采购日期与今天间隔的天数C2-DATEDIF(B2,TODAY(),'D'),如果是大于0则表示付款天数大于间隔天数,也就是未超期,否则就是超期;3、最后嵌套IF进行判断。

实例2下表为某公司部分员工的入职记录,要求计算截止今天每个员工的工龄,如C列所示。

函数公式C2单元格输入 =DATEDIF(B2,TODAY(),'Y'),公式下拉即可解释说明要求计算工龄也就是需要计算间隔年数,用DATEDIF函数,今天用TODAY函数表示,第三参数用'Y'。

实例3下表为某公司部分员工出生日期,为了给员工准备生日福利需要做一个生日提醒,如C列所示。

DateDif函数,你隐藏好深

DateDif函数,你隐藏好深又是周末来点简单的。

今天介绍一个隐藏较深的函数。

DATEDIFcalculate difference between two dates in days 这个DIF就是difference的缩写。

这个函数在这里是找不到的。

直接输入函数也不会有任何提示。

但确实有这么一个函数。

大概是一般用户用不到。

这个函数很简单,我直接翻译成容易理解的语言。

这个函数一共有三个参数。

=DATEDIF(起始日期,终止日期,代码)其中第三个参数有六种变化,并且需要用英文半角引号。

以下分别介绍1 代码D先上一个最简单的例子。

如下公式 =DATEDIF(A2,B2,"D")结果为703,就是这两个日期相差的天数。

2 代码M如果计算总月份数,就用代码“M”如下公式=DATEDIF(A2,B2,"M")得到的23,就是总的月份数。

3 代码Y如下公式 =DATEDIF(A2,B2,"Y")得到1,就是相差的年数。

2020-2018不是2吗?其实这两个日期相差1年多,但是不到两年,所以得到的是1年。

但这样计算会有个结余如果想知道,1年多少个月?1年多少天,1年多少个月多少天?继续使用其他代码。

4 代码YM如下公式=DATEDIF(A2,B2,"YM")得到11,这个11不是总的月数,而是忽略年份之后的月份数。

和年一起考虑就是1年11个月。

5 代码MD如下公式=DATEDIF(A2,B2,"MD")得到的3,这个3不是总天数,而是忽略年份月份之后的天数这三个参数分别计算就好理解就是1年11个月3天。

6 代码YD如果想忽略月份,比如上面的例子,想知道1年多少天?用以下公式=DATEDIF(A2,B2,"YD")也可以在D列做一个下拉列表进行选择然后第三个参数就选择D2这样,下拉列表中选择就可以得到不同的结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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相差一年,如果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关于此参数算法的讨论,可参考以前的一个老帖:club.excelhome./viewthread.php?tid=1655893,=Datedif(A2,B2,"D")此参数含义为返回时间段内的天数,这个参数算法最简单,实质就是两个Date相减得到的天数差,其算法可以表示为以下的公式:=B2-A24,=Datedif(A2,B2,"MD")此参数含义为返回时间段内的天数,忽略月和年。

虽然说“忽略”月和年,但实际上当B2的day小于A2的day 时,两者的日期差为负数,需要借位相减才能得到正数。

如何借位,向谁借位就涉及到了两个日期的所在月份及其年份。

此参数算法包含以下几部分:1)当B2的day大于等于A2的day时,可直接将两者的day相减得到结果。

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

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

例如A2为xx年3月4日,B2为xx年2月3日,则将B2减去xx年1月4日的天数差作为函数结果。

假如B2的月份为1月,则其前一个月份为前一年的12月。

3)此参数在ExcelxxSP2版本中包含bug,当满足上面第二个条件且B2日期为闰年的1月份日期时,函数结果会偏大164。

这个bug 在ExcelxxSP3版本中不存在,但在目前尚未发布的Excelxx中仍有这个问题存在,只不过那个版本中的差值为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日期为xx年5月31日,B2日期为xx年3月1日,date(xx,2,31)=xx年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),MON TH(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),MON TH(B2)-1,DAY(A2)))关于这个参数算法的讨论,还在这个帖子中进行过:club.excelhome./viewthread.php?tid=3577415,=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在Excelxx的SP3中不存在,但在Excelxx 中依旧存在,且差值变为113。

综合以上算法解释,这个参数的算法可以表示为以下的公式(上面的文字不好理解,如果能看懂下面的公式则比较容易理解上述算法):=IF(--(TEXT(B2,"!0!0-m-d"))>=--(TEXT(A2,"!0!0-m-d")),IF((DA Y(B2)其中包含下划线的部分为闰年bug的模拟,如果希望排除闰年的错误,可以将这部分内容去除。

相关文档
最新文档