想要显示所输入的日期在当月的第几周

文章编号:040787

在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。