日付の値に応じて曜日を表示したい
計算式を設定することで、日付の値に応じて曜日を表示できます。
準備
- 日付フィールドまたは日時フィールドをフォームに配置します。
フィールドコードは、フィールド名と同じものを設定します(日付または日時)。 - 文字列(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となる場合は金曜日になります。
- 2021年4月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関数、ROUNDUP関数、ROUNDDOWN関数]数値を四捨五入、切り上げ、切り捨てする