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. [cf611H]New Year and Forgotten Tree

    首先,来构造这棵树的形态 称位数相同的点为一类点,从每一类点中任选一个点,具有以下性质: 1.每一类中选出的点的导出子图连通(是一颗树) 2.每一条边必然有一个端点属于某一类中选出的点 (关于&quo ...

  2. java8两个字段进行排序问题

    //这个解决问题 Comparator<Anjianxinxi> getLianriqi = Comparator.comparing(Anjianxinxi::getLianriqi). ...

  3. Apache Kafka分布式流处理平台及大厂面试宝典v3.0.0

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache Kafka官网地址 http://kafka.apache.org/ 最新版本为 3.0.0 Apach ...

  4. 【Azure 环境】在Windows环境中抓取网络包(netsh trace)后,如何转换为Wireshark格式以便进行分析

    问题描述 如何在Windows环境中,不安装第三方软件的情况下(使用Windows内置指令),如何抓取网络包呢?并且如何转换为Wireshark 格式呢? 操作步骤 1) 以管理员模式打开CMD,使用 ...

  5. Codeforces 251D - Two Sets(异或方程组)

    题面传送门 题意: 你有一个可重集 \(S=\{a_1,a_2,\dots,a_n\}\),你要把它划分成两个可重集 \(S_1,S_2\) 使得 \(S\) 中每个元素都恰好属于 \(S_1\) 与 ...

  6. Codeforces 710F - String Set Queries(AC 自动机)

    题面传送门 题意:强制在线的 AC 自动机. \(n,\sum|s|\leq 3\times 10^5\) 如果不是强制在线那此题就是道 sb 题,加了强制在线就不那么 sb 了. 这里介绍两种做法: ...

  7. Codeforces 986D - Perfect Encoding(FFT+爪巴卡常题)

    题面传送门 题意:给出 \(n\),构造出序列 \(b_1,b_2,\dots,b_m\) 使得 \(\prod\limits_{i=1}^mb_i\geq n\),求 \(\sum\limits_{ ...

  8. Python Cheatsheet

    Comprehensive Python Cheatsheet Download text file, Buy PDF, Fork me on GitHub or Check out FAQ. Con ...

  9. Excel-单条件和多条件匹配搜索

    6.[单条件匹配搜索]有两个表格(姓名列,年龄列,收入列等),从表1总表中,把表2中人员的年龄和收入匹配出来: 方法一: 公式=VLOOKUP($S2,$O$2:$Q$5,2,0) #其中最后0< ...

  10. 55. Binary Tree Preorder Traversal

    Binary Tree Preorder Traversal My Submissions QuestionEditorial Solution Total Accepted: 119655 Tota ...