「日期计算」 节假日、周末及工作日、周末调休

懒得批爆

创作者俱乐部成员

不知不觉又到了清明节,小时候学过一篇课文,但是忘了这段文字是哪一句诗或文了,全文是什么来着?

没关系,问问WPS AI吧。

《清明时节雨纷纷》

清明时节雨纷纷,扫墓祭祖心思沉。

千家万户插杨柳,焚香祭酒寄深情。

游子归来无归处,泪湿衣襟心欲碎。

遥望故乡云烟起,何时归去共团圆?

纸钱飞舞化蝶飞,思念成灰随风去。

缅怀先人恩德重,子孙后代永铭记。

春光明媚草木香,踏青游玩心欢畅。

放飞风筝寄哀思,愿君在天得安息。

岁月匆匆人易老,珍惜当下莫蹉跎。

生命无常须珍惜,感恩生活心向善。

清明节时心自省,传承文化续新篇。

愿君常记先人恩,家国情怀永流传。

《清明节感怀》

清明时节雨纷纷,路上行人欲断魂。借问酒家何处有?牧童遥指杏花村。

昔日周末,悠游自得,琴书相伴,赏花品茗。然而,时光荏苒,周末渐逝,工作之日接踵而至,令人怅然若失。清明已至,追思往昔,倍觉时光之无情。

望眼欲穿,期盼即将到来的节假日与周末。愿得闲暇之余,重拾旧梦,吟咏风月,品味人生。然,闻听将周末调整为工作日之议,心中愤然不已。此举实乃剥夺民众休闲之时,剥夺生活之乐趣,实不可取。

愿生活之节奏,得以和谐;愿时光之流转,更显温馨。愿未来之节假日与周末,能给人以宁静与欢乐,让人们在忙碌之余,亦能享受生活的美好。

这说明WPS AI现在已经相当的强大了,为它WPS AI设定一个身份,WPS AI已经能自拟题目、自拟诗歌,还比较通顺,这像极了WPS表格的LABMDA函数LET函数,为WPS AI赋值后,WPS AI就能根据赋值自行演变,当然以上都与今天的内容没什么关系。


📌

言归正传,还是说节假日、周末、工作日怎么计算。

不知道大家有没有计算过, 2024年的节假日有多少天、周末有多少天,周末调休为工作日的有多少天,以及2024年的工作日包含调休的周末来说一共有多少天?

可能搜索引擎上能搜到很多这类天数的文章,但不是自己手工计算出来的,体会不到其中的乐趣

👋

这次就用函数公式来计算一下。

👋

首先自定义单元格格式

[$-x-sysdate]dddd, mmmm dd, yyyy

这段格式能让单元格里的日期以

2024年1月6日 星期六

形式展示出年月日和星期几,方便后面核查公式计算结果是否正确。

  1. 2024年的周末

首先计算下2024年一共有多少个周末(星期六和星期天),以及它们分别是几月几日。

一年52周,那么就有52×2=104个星期六和星期天

=WORKDAY.INTL(DATE(2024,1,1)-1,SEQUENCE(52,2),"1111100")

输入公式回车后很容易列出数组,左侧都是星期六,右侧都是星期天。

公式解释:

WORKDAY.INTL函数原本是用来计算工作日的,通过修改第三参数配置,也可以用来计算周末或其他日期,可以灵活使用

=WORKDAY.INTL(DATE(2024,1,1)-1,SEQUENCE(52,2),"1111100")中的

DATE(2024,1,1)代表了2024年1月1日算作开始日期

SEQUENCE(52,2)是搭建一个52行2列的数组框架,也就是WORKDAY.INTL函数的第二个参数(天数)

"1111100"这段挺迷的字符串配置情况是这样,每一个数组代表函数公式中一周的一天,其中1代表非工作日(休息日),0代表工作日(工作日)。

那么"1111100"配置信息如下:

周一:1(非工作日)
周二:1(非工作日)
周三:1(非工作日)
周四:1(非工作日)
周五:1(非工作日)
周六:0(工作日)
周日:0(工作日)

计算"00"的结果,对于函数来说就是工作日(周六和周日)。通过其他配置可以计算其他结果,譬如在构建的数组框架内只列出起止时间内的星期三数量"1101111"

  1. 2024年放假安排和周末调休上班的日期

这一段日期可以通过各大门户网站查询获得,搜索引擎中都能找到,这一段数据在后面的计算中会有所引用。

  1. 2024年全年的日期

这个日期可以不列,也可以列出来,这里只是作为展示,不参与后面的计算。

公式也很简单=SEQUENCE(53,7,DATE(2024,1,1))SEQUENCE函数构建一个53行7列的数组,DATE(2024,1,1)定义了序列的其实日期,即2024年1月1日,所以这个公式会从2024年1月1日开始,生成一个包含53周(每周7天)的日期序列。2024年12月31日后面的日期是送的,闰年送5个,其他年份送6个

  1. 2024年全年的工作日

这里是重点,由于上文中的2024年放假安排设置在D2:D29,2024年周末调休上班设置在E2:29,所以公式可以写为

=FILTER(SEQUENCE(366,1,DATE(2024,1,1),1),(WEEKDAY(SEQUENCE(366,1,DATE(2024,1,1),1),2)<6)*(ISNA(MATCH(SEQUENCE(366,1,DATE(2024,1,1),1),D2:D29,0)))+(NOT(ISNA(MATCH(SEQUENCE(366,1,DATE(2024,1,1),1),E2:E9,0)))))

这个公式中使用了FILTER函数、SEQUENCE函数、WEEKDAY函数、MATCHISNA函数,这些函数的作用如下:

  • FILTER函数用来筛选出工作日

  • SEQUENCE函数来构建2024年全年的日期数据

  • WEEKDAY函数用于检查日期是否为周一至周五(假设周六和周日为休息日)

  • MATCHISNA函数用于检查日期是否为节假日或调休日

由于=FILTER(......)生成的数据为一列,不方便查看,故用INDEX(数组,ROW,COLUMN)函数来将一列数据重新组织构建成51行5列的格式方便查看。

将公式=INDEX(FILTER(SEQUENCE(366,1,DATE(2024,1,1),1),(WEEKDAY(SEQUENCE(366,1,DATE(2024,1,1),1),2)<6)*(ISNA(MATCH(SEQUENCE(366,1,DATE(2024,1,1),1),$D$2:$D$29,0)))+(NOT(ISNA(MATCH(SEQUENCE(366,1,DATE(2024,1,1),1),$E$2:$E$9,0))))), (ROW(A1)-1)*5 + COLUMN(A1))

复制填充到51行5列的单元格中即可(后面的错误值删掉即可)。

其中INDEX(……ROW(A1)-1*5,COLUMN(A1))只是用于构建51行5列的数据框架,不参与日期的计算。

📌

以上就是2024年所有的工作日了,共计251天,累计算下来工作时间还不到8个月。

  1. 计算截至今天还剩下多少个工作日

这里使用的函数还是套用上面的计算2024年一共有多少个工作日的公式,只是将其中的=SEQUENCE(366,1,DATE(2024,1,1),1)全年日期换为从今天开始到2024年12月31日的日期列表。

这里面涉及到另外一个问题今天是2024年的第几天?

=TODAY()-DATE(YEAR(TODAY()),1,0)-1

  • TODAY() 函数返回当前的日期。

  • YEAR(TODAY()) TODAY() 返回的日期中提取年份。

  • DATE(YEAR(TODAY()), 1, 0) 则创建一个日期,这个日期是当前年份的1月0日,实际上等同于上一年的12月31日。

当从 TODAY() 函数返回的日期中减去 DATE(YEAR(TODAY()), 1, 0),得到的是从上一年的12月31日到今天的天数,即今年的第几天。

例如,今天是2024年4月4日,公式会计算出从2023年12月31日到2024年4月4日的天数,这就是2024年的第94天。

那么将=TODAY()-DATE(YEAR(TODAY()),1,0)-1代入上面的公式里替换=SEQUENCE(366,1,DATE(2024,1,1),1)即可得到截至今天剩余的工作日有哪些,最后对这个数组使用COUNTA计算非空单元格得到还剩272天。

这列数据很长有272行,也可以参照上例使用INDEX(数组,ROW,COLUMN)函数将这列数据构建到一个方便查看的数组框架中。

如果需要独立显示,可参考完整公式如下:

=COUNTA(FILTER(SEQUENCE(366-(TODAY()-DATE(YEAR(TODAY()),1,0))+1,1,TODAY()),(WEEKDAY(SEQUENCE(366-(TODAY()-DATE(YEAR(TODAY()),1,0))+1,1,TODAY()),2)<6)*(ISNA(MATCH(SEQUENCE(366-(TODAY()-DATE(YEAR(TODAY()),1,0))+1,1,TODAY()),D2:D29,0)))+(NOT(ISNA(MATCH(SEQUENCE(366-(TODAY()-DATE(YEAR(TODAY()),1,0))+1,1,TODAY()),E2:E9,0))))))

  1. 计算截至今天还剩下多少个周末、多少个法定节假日

由于前面计算了全年的周末A1:B52,并通过搜索网页得到了全年的节假日D2:D29,以及调休上班的周末E2:29,那么只需要结合COUNTIF函数和TODAY函数即可快速获得剩余的周末有多少,

剩余周六周日的数量(不含周末调休的工作日)

=COUNTIF(A1:B52,">"&TODAY())-COUNTIF(E2:E9,">"&TODAY())

剩余法定节假日

=COUNTIF(D2:D29,">"&TODAY())


👌

以上所有函数公式及示例均可以在金山文档中找到

https://kdocs.cn/l/co1iVhP1LWRc

由于金山文档对动态数组的支持不是太好,示例高清版链接如下

https://pan.baidu.com/s/1pDqk76tYXYjC5TjbDijwWA?pwd=6954 提取码: 6954


对于剩下这节假日、周末、工作日的计算到此告一段落

2024年剩下的节假日和周末,大家准备去哪玩儿?

2024年剩下的工作日,大家准备怎么熬?

四川省
浏览 3221
1
17
分享
17 +1
9
1 +1
全部评论 9
 
单元格格式,我复制过去应用,然后就变样子了,展现形式也和你的不一样,这是为啥
· 山东省
回复
懒得批爆

创作者俱乐部成员

设置一下格式吧, WEEKDAY、WORKDAY.INTL等这些函数的设计规则都是依照美国地区的规则,不过人家兼容其他时区,所以设置下就好了。
· 四川省
回复
 
厉害了,水印带动图
· 四川省
回复
 
清华学弟任泽岩

创作者俱乐部成员

厉害了,动图带水印
· 辽宁省
回复
 
打卡
· 山东省
回复
 
6
· 山东省
回复
 
跟着大佬学
· 江苏省
回复
 
很实用
· 广东省
回复