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

記事番号: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周还是第2周及以后。

  • 当日期不超过第1周的天数时
    判定日期位于第1周。
    (5)的字段中显示第1周的“1”。
  • 日期超过第1周的天数时
    则判定日期位于第2周及以后。
    此时,接着计算日期位于第2周及以后的第几周。

分支2:日期在第2周及以后时,为确定是第几周

当日期超过第1周的天数时,计算其属于第2周及之后的第几周。

用(2)中算出的日期减去第1周的天数,算出第1周的最后一天起经过的天数。
将此天数除以1周的天数7。

没有剩余,能整除的情况

商中加上第1周的1(周)就是有日期的周。
(5)的字段中显示商加1的数值。

例:当月首日是周一,输入的日期是13日时
当月首日是周一时,第1周有6天。
用13日减去第1周的天数6(日),从第1周的最后一天开始经过的天数算出是“7(日)”。
用7(日)除以7(日/周),计算结果是“1(周)余0(日)”。
商的1(周)加上第1周的1(周),算出13日在第2周。

有余数且不能整除时

商中加上余数所在的周、第1周共2周,便是有日期的周数。
(5)字段中显示的是商加2的数值。

例:当月的第一天是周一,输入的日期是15日时
当月的第一天是周一时,第1周有6天。
用15日减去第1周的天数6(日),从第1周的最后一天开始经过的天数算出为“9(日)”。
用这9(日)除以7(日/周),计算结果为“1(周)余2(日)”。
商1(周)加上有余数的那几周和第1周的2(周),算出15日在第3周。

参考:图表功能的活用实例

想要按每年每月的第几周来汇总记录时,在图表的设置中将分组项目指定为上述设置的(6)用于计算月份中第几周的字段。

  • 图表的设置范例 截图:“汇总”页面

  • 汇总结果的确认示例截图:汇总结果的确认页面

另外,如果有日期字段,使用图表功能,可将记录按每年第几周进行汇总。
在图表的设置中,将分组项目指定为日期字段的以周为单位
例如,若日期字段的值为“2022年3月30日”,因为该日期在2022年第13周内,所以记录将汇总到“2022 13”中。

参考:应用模板

可从以下位置下载包含本页面介绍的字段设置和可按“某年某月的第几周”汇总的图表设置的应用模板。

应用模板:what_week_en.zip

点击链接下载模板文件(zip)之后,请不要解压缩,直接导入Kintone。