記事番号:01043
「文字列(1行)」フィールドで計算式を設定することで、日付の値に応じて曜日を表示できます。
○準備
- 高度な設定で「小数部の桁数」に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 , "水曜","該当なし"
)
)
)
)
)
)
)
<設定例2>
- 「日時」フィールド
・フィールド名/フィールドコード:日時
- 「文字列(1行)」フィールド
・フィールド名/フィールドコード:曜日
・計算式:
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 , "水曜","該当なし"
)
)
)
)
)
)
)
注意
「日時」フィールドを配置する場合の計算式例を使う場合は、次に注意してください。
- タイムゾーンは、日本時間を想定しています。
日本時間はUNIX時刻より9時間進んでいるため、「日時」フィールドの値に9時間分の秒数を足した値を基に計算を行っています。他のタイムゾーンで利用する場合は、「9」の箇所を時差に応じて変更してください。 - 「日時」フィールドに1969年12月31日以前の値を入力した場合、正しく計算されません。
詳細は、次のページを参照してください。
日付、時刻、日時の計算
○計算式の解説
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の場合:水曜日
補足
-
「日時」フィールドを配置する場合
「日時」フィールドには時刻部分の値が含まれるため、日数を基に計算する上で時刻部分の処理が必要です。時刻部分の値が残っていると、算出される経過日数が小数となります。
計算式の都合上、経過日数は整数で扱う必要があるため、ROUNDDOWN関数を使って小数部分の切り捨てをしています。
[ROUND関数、ROUNDUP関数、ROUNDDOWN関数]数値を四捨五入、切り上げ、切り捨てする