已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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时间段中的天数。 mdstart_date与end_date日期中天数的差。忽略日期中的月和年。 ymstart_date与end_date日期中月数的差。忽略日期中的日和年。 ydstart_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=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) 关于这个参数算法的讨论,还在这个帖子中进行过:club.excelhome./viewthread.php?tid=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在Excelxx的SP3中不存在,但在Excelxx中依旧存在,且差值变为113。 综合以上算法解释,这个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农村产权交易市场金融配套服务创新考核试卷
- 2025年航空运输行业航空交通科技创新与航空服务升级研究报告及未来发展趋势预测
- 2025年服装行业时尚潮流与品牌发展研究报告及未来发展趋势预测
- 2025年旅游市场监管行政诉讼应对政策考核试卷
- 2025年教育科技行业教育科技产品对学生学习效果影响评估研究报告及未来发展趋势预测
- 120.2025年医疗人工智能医疗AI与前列腺癌诊断应用资格考核试卷
- 2026中国铁路郑州局集团有限公司招聘普通高校毕业生1288人(二)考试笔试模拟试题及答案解析
- 2025年延安子长县文化艺术演职人员招聘(32人)笔试考试备考试题及答案解析
- 2025年湖南岳阳市消防救援支队第三批政府专职消防员招录100人笔试考试参考试题及答案解析
- 2026中国铁路广州局集团有限公司招聘普通高校毕业生60人(三)考试笔试参考题库附答案解析
- 糖尿病预防及宣教
- 马克思主义基本原理专题测验答案
- 老年口腔基础知识培训课件
- 2025福建厦漳泉城际铁路有限责任公司筹备组社会招聘10人考试模拟试题及答案解析
- 数学活动自然数被3整除的规律
- TCNAS49-2025成人泌尿造口护理学习解读课件附送标准全文可编辑版
- 党校食堂管理制度
- 企业ERP项目立项与管理报告模板
- linux操作系统选择题大全
- DB5301∕T 24-2019 园林绿化养护规范
- 幼儿英语启蒙教学课件
评论
0/150
提交评论