想依據日期的值顯示星期幾

文章編號: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時間。UNIX時間是指從世界協調時間(UTC)1970年1月1日上午0時起至今經過的秒數。

詳情請參閱以下頁面。
日期、時間、日期與時間欄位值的處理方式

此處將輸入在欄位中的日期的值轉換為UNIX時間起至今的經過天數並進行計算。使用UNIX時間起至今的經過天數的值除以一週天數「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的值」與「將(經過天數-X)除以7的值再以將小數點以下無條件進位的ROUNDUP函數進行轉換後的結果」相減後的值若為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函數]將數值四捨五入、無條件進位、無條件捨去