小伙伴们大家好,今天讨论的日期问题你在工作中肯定或多或少的碰到过,但可能至今都不知道如何解决,今天也是日期和时间专题的最后一期了,赶紧拿起小本本学习起来吧!
1
计算给定日期所在月份的第一天
随便指定一个日期,如何计算该日期所属月份的第一天的日期?具体操作参见如下演示:
▲计算给定日期所在月份的第一天
公式:=EOMONTH(B6,-1)+1
原理:先用EOMONTH函数计算日期所属月份上月的最后一天,然后加上1就是日期所属月份的第一天。
2
计算给定日期所在月一共有几个星期天
要计算有几个星期天,我们可以找NETWORKDAYS.INTL函数帮忙,计算月初第一天到月末之间有多少个工作日(假设仅周日是工作日)。具体操作参见如下演示:
▲给定日期所在月一共有几个星期天
公式:
=NETWORKDAYS.INTL(EOMONTH(B6,-1)+1,EOMONTH(B6,0),"1111110")
原理:EOMONTH(B6,-1)+1计算日期所属月份的第一天,EOMONTH(B6,0)计算日期所属月份最后一天,然后用NETWORKDAYS.INTL计算月初到月末的工作日天数,NETWORKDAYS.INTL函数的第二参数使用文本字符串"1111110"表示只有星期日是工作日,这样就巧妙的求出了工作日的天数,也就是星期天的个数。
思考:如何求星期五的个数,大家可以自己尝试写一下公式。
3
计算给定日期所在月的工作日天数(周六下午周日全天休息)
如果公司每周休息一天半,周六下午和周日全天休息,这样如何计算工作日天数呢?
▲计算给定日期所在月的工作日天数
公式:
=NETWORKDAYS.INTL(EOMONTH(B6,-1)+1,EOMONTH(B6,0),"1111101")/2+NETWORKDAYS.INTL(EOMONTH(B6,-1)+1,EOMONTH(B6,0),"0000011")
原理:
NETWORKDAYS.INTL(EOMONTH(B6,-1)+1,EOMONTH(B6,0),"1111101")/2用来计算日期所属月份周六的天数,然后除以2,计算出周六实际上班的天数。
NETWORKDAYS.INTL(EOMONTH(B6,-1)+1,EOMONTH(B6,0),"0000011") 用来计算排除周六周日的工作日天数。
最后将以上两者相加就算出了实际工作天数。
4
计算员工工龄
计算员工从入职日期开始到现在的整年数,整月数和天数,我们可以找Datedif函数帮忙。具体操作参见如下演示:
▲计算员工工龄
公式:
=DATEDIF(C6,TODAY(),"Y")
=DATEDIF(C6,TODAY(),"YM")
=DATEDIF(C6,TODAY(),"MD")
函数结构:DATEDIF(起始日期,截止日期,统计方式)
统计方式 | 函数返回结果 |
Y | 日期时间段中的整年数 |
M | 日期时间段中的整月数 |
D | 日期时间段中的天数 |
MD | 日期时间段中天数的差。忽略日期中的月和年 |
YM | 日期时间段中月数的差。忽略日期中的日和年 |
YD | 日期时间段中天数的差。忽略日期中的年 |
原理:因为我们已经计算了整年,所以在求月份数的时候第三参数要用"YM",忽略日期中的日和年,由于已经求出了整月数,所以在求天数的时候第三参数要用"MD",忽略日期中的月和年。
5
计算两个日期之间相差的整月数
当DATEDIF的结束日期是当月的最后一天,而开始日期的天数比结束日期的天数大的时候,计算结果会少一个月,这种情况要怎么破呢?具体操作参见如下演示:
▲计算两个日期之间相差的整月数
公式:
=DATEDIF(B6,C6,"M")+AND(DAY(B6)>DAY(C6),C6=EOMONTH(C6,0))
原理:
AND(DAY(B6)>DAY(C6),C6=EOMONTH(C6,0))用来判断开始日期所在月份的天数是否大于结束日期所在月份的天数,并且结束日期是月末,如果条件成立,显示为TRUE,我们可以把TRUE当成1处理,这样就在原有DATEDIF公式结果的基础上加上1,如果条件不成立,显示为FALSE,FALSE可以当做0来处理,自然对DATEDIF公式的结果不会有任何影响。
6
计算日期在当年的第几周
接下来我们要处理关于周方面的问题,计算给定日期处在当年的第几周。具体操作参见如下演示:
▲计算日期在当年的第几周
公式:=WEEKNUM(B6,2)
原理:WEEKNUM函数第一参数是日期,第二参数是指一周从星期几开始,参数为2表示一周从星期一开始。
7
计算日期在当月的第几周
随便指定一个日期,计算它处于当月的第几周。具体操作参见如下演示:
▲计算日期在当月的第几周
公式:=WEEKNUM(B6,2)-WEEKNUM(EOMONTH(B6,-1)+1,2)+1
原理:
WEEKNUM(B6,2)计算出给定日期位于当年的第几周。WEEKNUM(EOMONTH(B6,-1)+1,2)计算出给定日期当月的第一天位于当年的第几周,然后两者相减加1得到的就是日期在当月的第几周。
8
计算给定日期所在月份一共有几周
计算一个日期所在月份总共有几周,要怎么写公式呢?
▲计算给定日期所在月份一共有几周
公式:=WEEKNUM(EOMONTH(B6,0),2)-WEEKNUM(B6-DAY(B6)+1,2)+1
原理:
WEEKNUM(EOMONTH(B6,0),2)求出给定日期所在月份的最后一天处于一年中的第几周。
WEEKNUM(B6-DAY(B6)+1,2)求出给定日期所在月份第一天处于一年中的第几周。
两者相减再加上1得到的就是本月总共的周数。
9
计算指定周的天数
随意指定一个年,月,周,需要计算这一周有几天。
▲计算指定周的天数
公式:
=SUM(N(MONTH(((C5&"-"&C6)-WEEKDAY(C5&"-"&C6,2))+C7*7-7+ROW(1:7))=C6))
原理:
C5&"-"&C6用来将年份和月份组成日期,结果为2019-8-1。
WEEKDAY(C5&"-"&C6,2)用来计算日期处于星期几,本公式的结果为4。
(C5&"-"&C6)-WEEKDAY(C5&"-"&C6,2)得到的是日期所在周的上一个星期天的日期,本公式的结果为2019-7-28。
((C5&"-"&C6)-WEEKDAY(C5&"-"&C6,2))+C7*7-7+ROW(1:7)得到的结果是第五周的所有日期,是一个数组 {"2019-08-26";"2019-08-27";"2019-08-28";"2019-08-29";"2019-08-30";"2019-08-31";"2019-09-01"}。
用MONTH函数提取数组中每个日期的月份,得到的也是一个数组{8;8;8;8;8;8;9},再将数组结果和我们指定的日期的月份(本案例中为8月)一一比较,相等则显示为TRUE, 反之显示为FALSE。
最终的结果也是数组{TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE}。
由于TRUE和FALSE 不能直接相加,所以我们用N函数将其转化为数字1和0,这样就得到了一个只包含1和0的数组{1;1;1;1;1;1;0},最后用SUM函数求和就得到了指定周的天数。
由于是数组公式,所以要ctrl+shift+enter三键结束录入,公式才能显示正确的结果。
关于日期和时间问题的专题分享到今天就结束了,接下来会跟大家一起探讨自定义格式的相关问题,期待您的关注。
更多Excel技能,欢迎您加入布衣公子网易云课堂《揭秘Excel真相》课程。
PPT课程地址:http://t.cn/Rm4oVdo
Excel课程地址:http://t.cn/Rm4oCLR
关联阅读:
曾经让我欲哭无泪的不重复计数问题,原来这么简单就搞定了!|Excel086
夏日需要清凉,送几个Excel日期和时间函数给你降降温!|Excel085
前方高能!第二波Excel的日期和时间函数来袭啦!|Excel084
学会这几招,再也不用为Excel的日期和时间问题掉头发啦!|Excel083
困扰了我多年的Excel打印问题原来这么轻松就解决啦!|Excel082
打印技巧知多少,快来这里找一找(上集)|Excel081
求和说简单也不简单【各种求和问题一次性通通搞定】(下集)|Excel080
Excel079-求和说简单也不简单【各种求和问题一次性通通搞定】(中集)
Excel078-求和说简单也不简单【各种求和问题一次性通通搞定】(上集)
Excel077-这几招绝了!快速定位你心中的那个“她”
……
更多技能分享请您后台回复「目录」查看
福利关键词:70、PNG、地图、姜饼人、图标、样机、手、试看、试听,后台回复有惊喜哦!
布衣公子《揭秘Excel真相》课程原价299
前5000人惠顾仅需199元
单击了解>>《揭秘EXCEL真相》课程详情
▼