想要显示所输入的日期在当月的第几周
在kintone的应用中,可通过使用计算公式,算出所输入的日期在当月的第几周。
此处介绍计算公式的设置示例。
准备
打开应用的设置页面中的表单标签,配置以下6个字段:
- (1) 日期字段
- (2) 计算字段
- (3) 计算字段
- (4) 单行文本框字段
- (5) 计算字段
- (6) 单行文本框字段
各字段的设置
打开已配置的各字段的设置页面,设置字段名称、字段代码、计算公式。
什么是字段代码?
对各字段进行如下设置,使(6)的字段中显示在(1)字段中输入的日期处于当月的第几周。
而(2)~(5)的字段用于中间计算。
(1) 日期字段
此字段用于输入想要计算(处于当月的第几周)的日期。
- 字段名称:日期
- 字段代码:日期
此字段中不设置计算公式。
(2) 计算字段
此字段中,仅计算在(1)中输入的日期的日数(进入该月后经过的天数)。
-
字段名称:日部分
-
字段代码:日部分
-
计算公式:设置以下计算公式。
DATE_FORMAT(日期, "d", "Asia/Tokyo")
(3) 计算字段
此字段中,根据在(1)中输入的日期,以UNIX时间的形式(数值)计算该月的第一天。
-
字段名称:月首日
-
字段代码:月首日
-
计算公式:设置以下计算公式。
日期-((日部分-1)*60*60*24)
(4) 单行文本框字段
此字段中,根据(3)中算出的月首日,计算该月首日是周几。
-
字段名称:月首日周几
-
字段代码:月首日周几
-
计算公式:勾选“自动计算”,设置以下计算公式。
IF( ( ( (月首日 / 60 / 60 / 24) - 0) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 0) / 7 ) , 0) = 0 , "周四", IF( ( ( (月首日 / 60 / 60 / 24) - 1) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 1) / 7 ) , 0) = 0 , "周五", IF( ( ( (月首日 / 60 / 60 / 24) - 2) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 2) / 7 ) , 0) = 0 , "周六", IF( ( ( (月首日 / 60 / 60 / 24) - 3) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 3) / 7 ) , 0) = 0 , "周日", IF( ( ( (月首日 / 60 / 60 / 24) - 4) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 4) / 7 ) , 0) = 0 , "周一", IF( ( ( (月首日 / 60 / 60 / 24) - 5) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 5) / 7 ) , 0) = 0 , "周二", IF( ( ( (月首日 / 60 / 60 / 24) - 6) / 7 ) - ROUNDUP(( ( (月首日 / 60 / 60 / 24) - 6) / 7 ) , 0) = 0 , "周三","无符合" ) ) ) ) ) ) )
(5) 计算字段
此字段中,根据(4)中算出的月首日周几,计算(2)中算出的日数处于该月的第几周。
-
字段名称:周数
-
字段代码:周数
-
计算公式:设置以下计算公式。此计算公式中,以周日作为一周开始的情形为例。
IF(月首日周几="周日", IF(日部分<=7, 1, IF(ROUNDUP((日部分-7)/7)-ROUNDDOWN((日部分-7)/7)=0, ROUNDDOWN((日部分-7)/7)+1, ROUNDDOWN((日部分-7)/7)+2)), IF(月首日周几="周一", IF(日部分<=6, 1, IF(ROUNDUP((日部分-6)/7)-ROUNDDOWN((日部分-6)/7)=0, ROUNDDOWN((日部分-6)/7)+1, ROUNDDOWN((日部分-6)/7)+2)), IF(月首日周几="周二", IF(日部分<=5, 1, IF(ROUNDUP((日部分-5)/7)-ROUNDDOWN((日部分-5)/7)=0, ROUNDDOWN((日部分-5)/7)+1, ROUNDDOWN((日部分-5)/7)+2)), IF(月首日周几="周三", IF(日部分<=4, 1, IF(ROUNDUP((日部分-4)/7)-ROUNDDOWN((日部分-4)/7)=0, ROUNDDOWN((日部分-4)/7)+1, ROUNDDOWN((日部分-4)/7)+2)), IF(月首日周几="周四", IF(日部分<=3, 1, IF(ROUNDUP((日部分-3)/7)-ROUNDDOWN((日部分-3)/7)=0, ROUNDDOWN((日部分-3)/7)+1, ROUNDDOWN((日部分-3)/7)+2)), IF(月首日周几="周五", IF(日部分<=2, 1, IF(ROUNDUP((日部分-2)/7)-ROUNDDOWN((日部分-2)/7)=0, ROUNDDOWN((日部分-2)/7)+1, ROUNDDOWN((日部分-2)/7)+2)), IF(月首日周几="周六", IF(日部分<=1, 1, IF(ROUNDUP((日部分-1)/7)-ROUNDDOWN((日部分-1)/7)=0, ROUNDDOWN((日部分-1)/7)+1, ROUNDDOWN((日部分-1)/7)+2)), "无符合" ) ) ) ) ) ) )
想要将周一作为一周的开始时,将计算公式的“月首日周几="周日"”改成“月首日周几="周一"”。此计算公式中其他的星期数也请同样改成后延1天的星期数。
如想进一步了解计算公式的详情,请参考“(5)的计算公式的说明”。
(6) 单行文本框字段
根据(5)中算出的周数,此字段中将以“某年某月的第几周”的形式显示(1)中输入的日期处于当月的第几周。
-
字段名称:第几周
-
字段代码:第几周
-
计算公式:勾选“自动计算”,设置以下计算公式。
DATE_FORMAT(日期, "YYYY年MM月的", "Asia/Tokyo")&"第"&周数&"周"
(5)的计算公式的说明
(5)的字段中,根据(4)中算出的月首日周几,计算(2)中算出的日数处于该月的第几周。
由于此计算公式中使用了IF函数,所以后面的计算会根据条件产生分支。
分支1:日数是否超过第1周的天数
根据月首日是周几,决定第1周的天数。
(5)的计算公式中,以周日作为一周开始的情形为例。
- 例:将周日作为一周的开始时
- 月首日周几为“周一”时,第1周有6天。
- 月首日周几为“周二”时,第1周有5天。
根据(2)中算出的日数是否超过第1周的天数,判断日数是在第1周还是在第1周之后。
- 日数没有超过第1周的天数时
判断日数在第1周。
在(5)的字段中显示第1周的“1”。 - 日数超过了第1周的天数时
判断日数在第1周之后。
此时,继续计算日数在第1周之后的哪一周。
分支2:日数在第2周之后时,计算是在哪一周
日数超过了第1周的天数时,计算是在第1周之后的哪一周。
用(2)中算出的日数减去第1周的天数,计算第1周最后一天后经过的天数。
用该天数除以1周的天数“7”。
没有余数,可以整除时
商加上第1周的“1(周)”所得的数则为日数所在的周。
在(5)的字段中显示商加1得出的数。
例:当月首日为“周一”,输入的日数为“13日”时
当月首日为“周一”时,第1周有6天。
用日数“13”减去第1周的天数“6(天)”,计算出第1周最后一天后经过的天数为“7(天)”。
用这个“7(天)”除以“7(天/周)”,计算结果是“1(周)余0(天)”。
商的“1(周)”加上第1周的“1(周)”,计算出日数在第2周。
有余数,不能整除时
商加上余下天数所在的那一周与第1周的和“2(周)”,得出的数为日数所在的周。
在(5)的字段中显示商加2得出的数。
例:当月首日为“周一”,输入的日数为“15日”时
当月首日为“周一”时,第1周有6天。
用日数“15”减去第1周的天数“6(天)”,计算出第1周最后一天后经过的天数为“9(天)”。
用这个“9(天)”除以“7(天/周)”,计算结果是“1(周)余2(天)”。
商的“1(周)”加上余下天数所处的那一周与第1周的和“2(周)”,算出日数在第3周。
参考:在图表功能中的使用示例
想要将记录按“某年某月的第几周”进行汇总时,在图表设置的“分组项目”中,指定上述设置的计算日期处于当月第几周的(6)字段。
-
图表的设置示例
-
汇总结果的确认示例
此外,如有日期字段,可使用图表功能,分年的第几周对记录进行汇总。
请在图表设置的“分组项目”中,将日期字段指定为“以周为单位”。
例如,日期字段的值为“2022年3月30日”时,在2022年的第13周,因此记录会汇总到“2022 13”中。
参考:应用模板
可从下方下载应用模板,此模板中包含了本页面中所介绍的字段设置、以及可根据“某年某月的第几周”进行汇总的图表设置。
应用模板:what_week_en.zip
点击链接下载模板文件(zip)之后,请不要解压缩,直接导入kintone。