跳到主要内容

如何计算月初月末周一周日、本周范围

基础函数介绍

关于本次公式使用到的几个函数介绍:

1.生成日期

将数字拼接成为日期——DATE(年,月,日,时,分)

2.时间转换

提取日期中的年月日时分秒/判断周几——TEXT(日期,"指定格式")

指定格式有:年 "YYYY" 月 "MM" 日 "DD" 时 "HH" 分 "mm" 秒 "ss"

"E" :表示星期,结果为06,分别表示星期日星期六

"EE" :表示星期,例如:周日、周一、周二等

"EEE":表示星期,例如:星期日、星期一、星期二等

3.当前时间

精确到秒——NOW()

精确到日——CURDATE()

4.日期加减天数

指定日期,增加或减少指定单位的时间后的日期——DATEDELTA ( 日期 , 数量 , 时间单位 )

数量:需要增加/减少的数量,正数为增加,负数为减少 时间单位:天 "D";月 "M";年 "Y";小时 "H";分钟 "MIN" 不填写时间单位是默认单位为天

5.条件判断

根据判断条件的正确或错误,返回不同的值——IF(判断条件,真值, 假值)

6.日期比较/时间差

计算两个日期字段之间的天数差,可返回负值——DAYS(结束日期,起始日期)

日期比较,通过天数差的正负值比较——DAYS(结束日期,起始日期)>0

注:此方法不可取:结束日期 > 起始日期

前往帮助文档-学习基础函数

本月月初

逻辑:TEXT将日期转换为指定格式的年和月,再使用DATE拼接日期得到月初日期

本月月初=DATE(年,月,日)=DATE(今年,本月,月初1号)

年,即今年=TEXT(当前日期,取年)=TEXT(CURDATE(),"YYYY")

月,即本月=TEXT(当前日期,取月)=TEXT(CURDATE(),"MM")

日,即月初1号="01"

本月月初=DATE(TEXT(CURDATE(),"YYYY"),TEXT(CURDATE(),"MM"),"01")

如需指定日期,可将"CURDATE()"更换为日期字段.

本月月末

逻辑:用DATEDELTA将日期增加一个月,TEXT将日期转换为指定格式的年和月,再使用DATE拼接日期得到第二个月的月初日期,最后用DATEDELTA将日期减去一天

本月月末=DATEDELTA (日期字段,数量,时间单位)=DATEDELTA (下月月初, 减少1天)

下月月初=DATE(年,月,日)=DATE(下月年份,下月月份,月初1号)

下月,即当前日期+1个月=DATEDELTA(当前日期,1,"M")=DATEDELTA(CURDATE(),1,"M")

下月年份=TEXT(下月,取年)=TEXT(DATEDELTA(CURDATE(),1,"M"),"YYYY")

下月月份=TEXT(下月,取月)=TEXT(DATEDELTA(CURDATE(),1,"M"),"MM")

月初1号="01"

下月月初=DATE(TEXT(DATEDELTA(CURDATE(),1,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),1,"M"),"MM"),"01")

本月月末=DATEDELTA(DATE(TEXT(DATEDELTA(CURDATE(),1,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),1,"M"),"MM"),"01"),-1)

如需指定日期,可将"CURDATE()"更换为日期字段.

下月月初

逻辑:用DATEDELTA将日期增加一个月,TEXT将日期转换为指定格式的年和月,再使用DATE拼接日期得到第二个月的月初日期

下月月初=DATE(年,月,日)=DATE(下月年份,下月月份,月初1号)

下月,即当前日期+1个月=DATEDELTA(当前日期,1,"M")=DATEDELTA(CURDATE(),1,"M")

下月年份=TEXT(下月,取年)=TEXT(DATEDELTA(CURDATE(),1,"M"),"YYYY")

下月月份=TEXT(下月,取月)=TEXT(DATEDELTA(CURDATE(),1,"M"),"MM")

月初1号="01"

下月月初=DATE(TEXT(DATEDELTA(CURDATE(),1,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),1,"M"),"MM"),"01")

如需指定日期,可将"CURDATE()"更换为日期字段.

下月月末

逻辑:用DATEDELTA将日期增加两个月,TEXT将日期转换为指定格式的年和月,再使用DATE拼接日期得到第二个月的月初日期,最后用DATEDELTA将日期减去一天

本月月末=DATEDELTA (日期字段,数量,时间单位)=DATEDELTA (下下月月初, 减少1天)

下下月月初=DATE(年,月,日)=DATE(下下月年份,下下月月份,月初1号)

下下月,即当前日期+2个月=DATEDELTA(当前日期,2,"M")=DATEDELTA(CURDATE(),2,"M")

下下月年份=TEXT(下下月,取年)=TEXT(DATEDELTA(CURDATE(),2,"M"),"YYYY")

下下月月份=TEXT(下下月,取月)=TEXT(DATEDELTA(CURDATE(),2,"M"),"MM")

月初1号="01"

下下月月初=DATE(TEXT(DATEDELTA(CURDATE(),2,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),2,"M"),"MM"),"01")

下月月末=DATEDELTA(DATE(TEXT(DATEDELTA(CURDATE(),2,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),2,"M"),"MM"),"01"),-1)

如需指定日期,可将"CURDATE()"更换为日期字段.

本周周一

逻辑:使用TEXT判断周几,在用DATEDELTA减去对应的天数。除了周日,其他都可以遵循一定的规律。

TEXT(日期,"E") 本周周一 ⚠️ "E" :表示星期,结果为06,分别表示星期日星期六

周日,0 减去6天 = -6 即 -6

周一,1 减去0天 = -1+1 即 -NUM(TEXT(日期,"E")+1

周二,2 减去1天 = -2+1 即 -NUM(TEXT(日期,"E")+1

周三,3 减去2天 = -3+1 即 -NUM(TEXT(日期,"E")+1

周四,4 减去3天 = -4+1 即 -NUM(TEXT(日期,"E")+1

周五,5 减去4天 = -5+1 即 -NUM(TEXT(日期,"E")+1

周六,6 减去5天 = -6+1 即 -NUM(TEXT(日期,"E")+1

IF(判断条件,真值, 假值)

判断条件:非周日,即 NUM(TEXT(CURDATE(),"E"))!=0

真值:如果是周一至周六,计算周一时,减去的天数可表示为:-NUM(TEXT(日期,"E")+1

即 DATEDELTA(当前日期, (-NUM(TEXT(当前日期,"E"))+1), "D")

假值:如果是周日,计算周一时,减去的天数可表示为:-6

即 DATEDELTA(当前日期, -6, "D")

本周周一 = IF(非周日, 减去指定规律的天数, 减去固定的6天)

**=**IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),(-NUM(TEXT(CURDATE(),"E"))+1),"D"),DATEDELTA(CURDATE(),-6,"D"))

如需指定日期,可将"CURDATE()"更换为日期字段.

本周周日

逻辑:使用TEXT判断周几,在用DATEDELTA加上对应的天数。除了周日,其他都可以遵循一定的规律。

TEXT(日期,"E") 本周周日 ⚠️ "E" :表示星期,结果为06,分别表示星期日星期六

周日,0 当天 CURDATE()

周一,1 加上6天 = -1+7 即 -NUM(TEXT(日期,"E")+7

周二,2 加上5天 = -2+7 即 -NUM(TEXT(日期,"E")+7

周三,3 加上4天 = -3+7 即 -NUM(TEXT(日期,"E")+7

周四,4 加上3天 = -4+7 即 -NUM(TEXT(日期,"E")+7

周五,5 加上2天 = -5+7 即 -NUM(TEXT(日期,"E")+7

周六,6 加上1天 = -6+7 即 -NUM(TEXT(日期,"E")+7

IF(判断条件,真值, 假值)

判断条件:非周日,即 NUM(TEXT(CURDATE(),"E"))!=0

真值:如果是周一至周六,计算周日时,加上的天数可表示为:-NUM(TEXT(日期,"E")+7

即 DATEDELTA(当前日期, (-NUM(TEXT(当前日期,"E"))+7), "D")

假值:如果是周日,即周日当天

即 CURDATE()

本周周日 = IF(非周日, 加上指定规律的天数, 当前日期)

=IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),(-NUM(TEXT(CURDATE(),"E"))+7),"D"),CURDATE())

如需指定日期,可将"CURDATE()"更换为日期字段.

上周周一

逻辑:使用TEXT判断周几,在用DATEDELTA减去对应的天数。除了周日,其他都可以遵循一定的规律。

TEXT(日期,"E") 上周周一 ⚠️ "E" :表示星期,结果为06,分别表示星期日星期六

周日,0 减去13天 即 -13

周一,1 减去7天 = -1-6 即 -NUM(TEXT(日期,"E")-6

周二,2 减去8天 = -2-6 即 -NUM(TEXT(日期,"E")-6

周三,3 减去9天 = -3-6 即 -NUM(TEXT(日期,"E")-6

周四,4 减去10天= -4-6 即 -NUM(TEXT(日期,"E")-6

周五,5 减去11天= -5-6 即 -NUM(TEXT(日期,"E")-6

周六,6 减去12天= -6-6 即 -NUM(TEXT(日期,"E")-6

IF(判断条件,真值, 假值)

判断条件:非周日,即 NUM(TEXT(CURDATE(),"E"))!=0

真值:如果是周一至周六,计算上周一时,减去的天数可表示为:-NUM(TEXT(日期,"E")-6

即 DATEDELTA(当前日期, (-NUM(TEXT(当前日期,"E"))-6), "D")

假值:如果是周日,计算上周一时,减去的天数可表示为:-13

即 DATEDELTA(当前日期, -13, "D")

上周周一 = IF(非周日, 减去指定规律的天数, 减去固定的13天)

**=**IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),(-NUM(TEXT(CURDATE(),"E"))-6),"D"),DATEDELTA(CURDATE(),-13,"D"))

如需指定日期,可将"CURDATE()"更换为日期字段.

上周周日

逻辑:使用TEXT判断周几,在用DATEDELTA减去对应的天数。除了周日,其他都可以遵循一定的规律。

TEXT(日期,"E") 上周周日 ⚠️ "E" :表示星期,结果为06,分别表示星期日星期六

周日,0 减去7天 即 -7

周一,1 减去1天 = -1 即 -NUM(TEXT(日期,"E")

周二,2 减去2天 = -2 即 -NUM(TEXT(日期,"E")

周三,3 减去3天 = -3 即 -NUM(TEXT(日期,"E")

周四,4 减去4天 = -4 即 -NUM(TEXT(日期,"E")

周五,5 减去5天 = -5 即 -NUM(TEXT(日期,"E")

周六,6 减去6天 = -6 即 -NUM(TEXT(日期,"E")

IF(判断条件,真值, 假值)

判断条件:非周日,即 NUM(TEXT(CURDATE(),"E"))!=0

真值:如果是周一至周六,计算上周日时,减去的天数可表示为:-NUM(TEXT(日期,"E")

即 DATEDELTA(当前日期, -NUM(TEXT(当前日期,"E")), "D")

假值:如果是周日,计算上周日时,减去的天数可表示为:-7

即 DATEDELTA(当前日期, -7, "D")

上周周日 = IF(非周日, 减去指定规律的天数, 减去固定的7天)

=IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),-NUM(TEXT(CURDATE(),"E")),"D"),DATEDELTA(CURDATE(), -7, "D"))

如需指定日期,可将"CURDATE()"更换为日期字段.

动态范围:本周(周一开始)

需求场景

我们的数据/报表/门户,数据筛选条件,动态范围“本周”,开始时间都是从上周日到本周六。

但是按照中国人的习惯,一般是从本周一到本周日。

image.png

高级模式筛选(可用于字段/视图/报表等,不支持门户)

逻辑

本周周一 <= 申请日期 <= 本周周日 (注:此为思路,实际公式不支持该形式)

在轻流中可以这样表示:

条件1:DAYS(申请日期,本周周一) >= 0

条件2:DAYS(申请日期,本周周日) <= 0

同时满足条件1和条件2:AND(条件1, 条件2)

即 AND(DAYS(申请日期,本周周一) >= 0, DAYS(申请日期,本周周日) <= 0)

将上述求得的本周周一和本周周日公式套入即可。

公式复制

AND(DAYS(申请日期,IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),(-NUM(TEXT(CURDATE(),"E"))+1),"D"),DATEDELTA(CURDATE(),-6,"D")))>=0,DAYS(申请日期,IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),(-NUM(TEXT(CURDATE(),"E"))+7),"D"),CURDATE()))<=0)

绿框内“申请日期”请手动替换为应用内日期字段

实现效果

image.png

动态范围:上周(上周一开始)

需求场景

我们的数据/报表/门户,数据筛选条件,动态范围“上周”,开始时间都是从上上周日到上周六。

但是按照中国人的习惯,一般是从上周一到上周日。

image.png

高级模式筛选(可用于字段/视图/报表等,不支持门户)

逻辑

上周周一 <= 申请日期 <= 上周周日 (注:此为思路,实际公式不支持该形式)

在轻流中可以这样表示:

条件1:DAYS(申请日期,上周周一) >= 0

条件2:DAYS(申请日期,上周周日) <= 0

同时满足条件1和条件2:AND(条件1, 条件2)

即 AND(DAYS(申请日期,上周周一) >= 0, DAYS(申请日期,上周周日) <= 0)

将上述求得的上周周一和上周周日公式套入即可。

公式复制

AND(DAYS(申请日期,IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),(-NUM(TEXT(CURDATE(),"E"))-6),"D"),DATEDELTA(CURDATE(),-13,"D")))>=0,DAYS(申请日期,IF(NUM(TEXT(CURDATE(),"E"))!=0,DATEDELTA(CURDATE(),-NUM(TEXT(CURDATE(),"E")),"D"),DATEDELTA(CURDATE(), -7, "D")))<=0)

绿框内“申请日期”请手动替换为应用内日期字段

实现效果

image.png

动态范围:下月​

需求场景

通过高级模式筛选,获得动态范围“下月”的数据,开始时间都是从下月月初到下月月末。

高级模式筛选(可用于字段/视图/报表等,不支持门户)

逻辑

下月月初 <= 日期字段 <= 下月月末 (注:此为思路,实际公式不支持该形式)

在轻流中可以这样表示:

条件1:DAYS(日期字段,下月月初) >= 0

条件2:DAYS(日期字段,下月月末) <= 0

同时满足条件1和条件2:AND(条件1, 条件2)

即 AND(DAYS(日期字段,下月月初) >= 0, DAYS(日期字段,下月月末) <= 0)

将上述求得的下月月初和下月月末公式套入即可。

公式复制

AND(DAYS(日期字段,DATE(TEXT(DATEDELTA(CURDATE(),1,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),1,"M"),"MM"),"01"))>=0,DAYS(日期字段,DATEDELTA(DATE(TEXT(DATEDELTA(CURDATE(),2,"M"),"YYYY"),TEXT(DATEDELTA(CURDATE(),2,"M"),"MM"),"01"),-1))<=0)

绿框内“日期字段”请手动替换为应用内日期字段

实现效果

image.png