想根据日期的值显示周几

文章编号:040743

通过设置计算公式,可根据日期的值显示周几。

准备

  • 将日期字段或日期与时间字段配置到表单中。
    将字段代码设置为与字段名称相同的值(日期或日期与时间)。

  • 将单行文本框字段配置到表单中。字段代码任意输入。

  • 高级设置中“小数位的位数”设置为1及以上的值。

详情请参考以下页面。
什么是字段代码?
设置数值的有效位数和舍入方法

计算公式

在单行文本框字段的设置对话框中,勾选[自动计算],设置以下的计算公式:
日期字段和日期与时间字段的计算公式不同。

配置日期字段时

内容已复制
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 , "周三","不存在"
            )
          )
        )
      )
    )
  )
)

配置日期与时间字段时

内容已复制
IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 0) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 0) / 7 ) , 0) = 0 , "周四",
  IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 1) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 1) / 7 ) , 0) = 0 , "周五",
    IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 2) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 2) / 7 ) , 0) = 0 , "周六",
      IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 3) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 3) / 7 ) , 0) = 0 , "周日",
        IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 4) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 4) / 7 ) , 0) = 0 , "周一",
          IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 5) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 5) / 7 ) , 0) = 0 , "周二",
            IF( ( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24) ) - 6) / 7 ) - ROUNDUP(( ( (ROUNDDOWN((日期与时间+(60 * 60 * 9))/ 60 / 60 / 24)) - 6) / 7 ) , 0) = 0 , "周三","不存在"
            )
          )
        )
      )
    )
  )
)

计算公式的说明

kintone的计算公式是将“日期”或“日期与时间”的值以UNIX时间,即从1970年1月1日上午0点的协调世界时(UTC)开始经过的秒数进行处理。

详情请参考以下页面。
日期、时间、日期与时间字段的值的处理方法

此处,会将字段中输入的日期的值转换为UNIX时间起经过的天数并进行计算。具体思路为:用UNIX时间起经过天数的值除以1周的天数“7”,然后基于余数的值计算是周几。由此实现根据日期的值显示是周几的效果。

  • 思路的示例
    • 输入2021年4月1日时
      从1970年1月1日(周四)起,经过了18718天。
      18718除以7,商2674余0。
      这就说明,2021年4月1日正好是从1970年1月1日(周四)起算的2674周之后。是周四的0天之后,因此为周四。
      也就是说当输入日期的经过天数除以7余0时,为周四。

    • 输入2021年4月2日时
      从1970年1月1日(周四)起,经过了18719天。
      18719除以7,商2674余1。
      这就说明,2021年4月2日正好是从1970年1月1日(周四)起算的2674周再加1天之后。是周四的1天之后,因此为周五。
      也就是说当输入日期的经过天数除以7余1时,为周五。

根据上述示例,所输入日期自UNIX时间起经过的天数除以“7”后的余数值与是周几之间的关系如下:

A)经过天数除以7余0时:周四
B)经过天数除以7余1时:周五
C)经过天数除以7余2时:周六
D)经过天数除以7余3时:周日
E)经过天数除以7余4时:周一
F)经过天数除以7余5时:周二
G)经过天数除以7余6时:周三

但kintone的计算功能并不能求得余数。
因此,该方法不是用余数的值直接确定是周几,而是通过从经过天数中减去成为余数的值,计算出能整除“7”的值来确定是周几。

为了计算出能整除“7”的值,当计算公式无法整除时计算结果会包含小数,然后使用将小数点后向上舍入的ROUNDUP函数进行转换。

将“(经过天数-X)除以7的值”和“使用ROUNDUP函数将(经过天数-X)除以7所得商的小数点进行向上舍入后的结果”相减,差为0时则能整除,即可判断余数为“0”,通过以下的“A)”~“G)”确定是周几。

A)经过天数-0的值除以7余0时:周四
B)经过天数-1的值除以7余0时:周五
C)经过天数-2的值除以7余0时:周六
D)经过天数-3的值除以7余0时:周日
E)经过天数-4的值除以7余0时:周一
F)经过天数-5的值除以7余0时:周二
G)经过天数-6的值除以7余0时:周三

关于ROUNDUP函数,请参考以下页面:
[ROUND函数、ROUNDUP函数、ROUNDDOWN函数]对数值进行四舍五入、向上舍入、向下舍入