想根据日期的值显示周几

文章编号: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)开始经过的秒数进行处理。
日期、时间、日期与时间字段的值的处理方法

因此计算公式的原理为将输入日期的值转换为经过的天数,再将经过天数的值除以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时,为周五。

通过上述示例的思路,可得出输入日期的经过天数的余数与周几的关系如下:

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

但kintone的计算功能并不能求得余数。
因此,使用以下不用余数的方法:

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时:周三

当有余数时即说明计算结果中含有小数。因此,将上述的“A)”~“G)”中“除以7的值”和“把除以7的值代入ROUNDUP函数得出的结果”相减,当结果为0时显示相应的周几。
关于ROUNDUP函数,请参考“[ROUND函数]对数值进行四舍五入、向上舍入、向下舍入”。

日期与时间字段的说明

日期与时间字段的示例中所示的计算公式是假设为日本时间时的计算公式。由于日本时间比UNIX时间早9个小时,因此基于日期与时间字段的值加上9小时的秒数进行计算。使用其他时区时,请根据时差更改“9”的部分。

与日期字段不同,日期与时间字段中包含时间部分的值。
如保留时间部分的值,计算出的经过天数将含有小数。
出于计算公式的考虑,需要将经过天数处理为整数,因此使用ROUNDDOWN函数舍去小数部分。