Excel中有个工作表函数DateDif,专门用来计算两日期之间的日差、月差、年差,传说十分好用。

具体用法在此就省略了,好奇的童鞋请自行*度~

可是,在Excel里,他却是个“没户口”的……且至今还是“黑户”……这都多少年过去了,他这户口问题,到现在没解决!

有人说,那是因为DateDif有BUG,别的不说,就看这:

从1月31日到3月1日之间 忽略年和月的单纯的日差,差,呃,-2天?你说他怎么想的?公式结果都混成这样了,还想报户口?难怪黑户了!

可是,你造吗?DateDif童鞋这是在背锅……

这话,就得从工作表中的日期本质开始说起了,事实上,日期就是数值穿了件外衣,数值就是日期的裸奔形式……咳咳,有点扯远了,好吧我们来看这个:

B2里显示的是数值“44470”,对他设置单元格数字格式时,里面【短日期】和【长日期】的选项就是2021年10月1日,所以“44470”其实是在裸奔……咳咳……不是,我其实想说,日期,是一个连续的值,从1900年1月1日起,每一天相当于数值1,一路小跑到今天,终于奔到了44470……(暂时忽略1900-2-29的问题)

再重复一遍:工作表日期,从1900-1-1至9999-12-31,本质上是一个连续的数值、连续的数值、连续的数值、连续的!连续的!连续的!

所以,DateDif函数的结果也是连续的!连续的!连续的!

从1月1日起,到2月25日、26日……3月1日、2日,年差都是0,月差从1到2,日差也都是顺着来,这,没毛病吗?

可是,从1月31日起,毛病就来了……

你说,人家能怎么办呢?从月的角度来看,1月31日到3月1日之间,确实是相隔一个月以上了,一个1月一个3月啊,但两者的日期相隔呢?呃29天?好像有道理,所以,1月31日到3月1日之间相隔了一个月外加29天?这小学算术是谁教的?

再加上之前一直强调的,日期是个连续的数值,DateDif的结果也是连续的数值,所以这里不用负数用谁啊?否则你让人家怎么连续啊?

那么话又说回来了,这锅,DateDif童鞋究竟是在为谁背?

为设计日期的那个家伙!因为每个月的天数有差异,有28天、有29天、有30天、有31天。

所以,当DateDif里的起始日期是1-27日时,人家绝对是函数界里的五好青年,不怕苦不怕累埋头苦干兢兢业业计算着每两个日期之间的各种差……

好吧,我这话说太早了,从1月27日到2月27日(非闰年)之间,相差几个月几天?1个月0天,好像是对的,可是,好像,又有哪里不对?!

1月27日距月底还有4天,2月27日距月底,就1天了,怎么能说这二位相差1个月0天?

所以,在我们认知当中,日期差有两个标准,一是以月初为标准,另一是以月末为标准,月初都是从1日开始,这个没毛病, 而月末……

我们是否可以设计一套函数,把月末作为标准呢?这个,嗯,可以有!

公式如下:

Y:=YEAR(EDATE(B3+DAY(EOMONTH(A3,0))-DAY(A3)+1,-MONTH(A3)))-YEAR(A3)

YM:=MOD(MONTH(B3+DAY(EOMONTH(A3,0))-DAY(A3)+1)+11-MONTH(A3),12)

MD: =DAY(B3+DAY(EOMONTH(A3,0))-DAY(A3)+1)-1

如此一来,日期间隔有了两个标准,理论上是可以用IF来加个判断,某天(比如28日)之前的用DateDif,之后的用月末标准。但是这样一来,必然又会出现另一个问题,明明起始日期不是同一天,相差结果却是一样,抽嘴角……

所以,这个BUG,其实是解决不了了,大概这才是导致DateDif这位大好青年一直以来“黑户”的真正原因吧。

彻底解决的办法有没有呢?

肯定是有的,那就是改日期规则,每年12个月、每月全部固定30天,多下来5、6天怎么办呢?

全部算假期呗~

替DateDif哭诉一把(Excel函数集团)的更多相关文章

  1. LET函数(Excel函数集团)

    LET函数,是个Office365新增函数,所以,还在用上古版本的童鞋请无视此篇哈~ 话说Excel中,有个自定义名称的功能,如下图,左右两个表分别自定义了"data1"和&quo ...

  2. Vlookup大叔与一对多查找(Excel函数集团)

    所谓一对多查找,就是根据一个条件,把多个符合条件的结果全部找出来. 其实吧,一对多查找不是什么,尤其是O365的Filter函数横空出世震撼全场之后,简直就是瞬间把所有传统的数组解法甩出去七八十来条街 ...

  3. Vlookup大叔早已油腻(Excel函数集团)

    1.Vlookup基础用法:https://mp.weixin.qq.com/s/0JRytWlBD-KYM2jkecG2rA 2.合并字符串:https://mp.weixin.qq.com/s/9 ...

  4. 字符串函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  5. 日期与时间函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  6. 统计函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  7. 数组基础(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  8. 数据库函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  9. 其他(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

随机推荐

  1. hutool的时间工具类

    hutool的时间工具类 糊涂的时间工具类有很多使用方法,用到了这几个 日期向后偏移     String now = DateUtil.now();        Date date4= DateU ...

  2. 从一个简单的Delete删数据场景谈TiDB数据库开发规范的重要性

    故事背景 前段时间上线了一个从Oracle迁移到TiDB的项目,某一天应用端反馈有一个诡异的现象,就是有张小表做全表delete的时候执行比较慢,而且有越来越慢的迹象.这个表每次删除的数据不超过20行 ...

  3. Codeforces 1396D - Rainbow Rectangles(扫描线+线段树)

    Codeforces 题面传送门 & 洛谷题面传送门 一道鸽了整整一年的题目,上一次提交好像是 2020 年 9 月 13 日来着的(?) 乍一看以为第 2 个提交和第 3 个提交只差了 43 ...

  4. HDU 6116 路径计数

    HDU 6116 路径计数 普通生成函数常用于处理组合问题,指数生成函数常用于处理排列问题. 考虑 对于 $ a $ 个 $ A $ 分为很多堆,这么分的方案数是 $ C_{a-1}^{i-1} $ ...

  5. Docker Alpine Dockerfile 安装nginx,最小镜像

    Docker Alpine Dockerfile 安装nginx,最小镜像 FROM alpine MAINTAINER will ## 将alpine-linux:apk的安装源改为国内镜像 RUN ...

  6. go定义接口以及类怎么使用接口

    go定义接口以及类怎么使用接口 多态是指代码可以根据类型的具体实现采取不同行为的能力.如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 接口是用来定义行为的类型.这些被定义 ...

  7. 【1】蛋白鉴定软件之X!Tandem

    目录 1. 简介 2.下载安装 3. 软件试用 4. 结果 5. FAQ 1. 简介 X!Tandem是GPM:The Global Proteome Machine(主要基于Web的开源用户界面,用 ...

  8. jquery操作html中图片宽高自适应

    在网站制作中如果后台上传的图片不做宽高限制,在前台显示的时候,经常会出现图片变形,实用下面方法可以让图片根据宽高自适应,不论是长图片或者高图片都可以完美显示. $("#myTab0_Cont ...

  9. C4.5决策树-为什么可以选用信息增益来选特征

    要理解信息增益,首先要明白熵是什么,开始很不理解熵,其实本质来看熵是一个度量值,这个值的大小能够很好的解释一些问题. 从二分类问题来看,可以看到,信息熵越是小的,说明分类越是偏斜(明确),可以理解为信 ...

  10. CentOS6忘记root密码如何重置

    CentOS6忘记root密码,如何重置密码 ①     重启服务器,按"e"键进入修改系统开机项界面 ②    选择内核项,按"e"进入其中进行配置 在文件内 ...