日付の値に応じて曜日を表示したい

記事番号:040743

計算式を設定することで、日付の値に応じて曜日を表示できます。

準備

  • 日付フィールドまたは日時フィールドをフォームに配置します。
    フィールドコードは、フィールド名と同じものを設定します(日付または日時)。

  • 文字列(1行)フィールドをフォームに配置します。フィールドコードは任意です。

  • 高度な設定で「小数部の桁数」に1以上の値を設定します。

詳細は、次のページを参照してください。
フィールドコードとは
数値の有効桁数と丸めかたを設定する

計算式

文字列(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で割った値」と「(経過日数-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関数]数値を四捨五入、切り上げ、切り捨てする