Formula(関数)で土日を除いた日数を計算する
概要
こちらの関数を使うと、期間
と名付けた日付プロパティの開始日から終了日のうち、土日を除いた日数を算出することができます。
dateBetween(dateEnd(prop("期間")), dateStart(prop("期間")), "days") + 1 - (2 * (toNumber(formatDate(dateEnd(prop("期間")), "w")) - toNumber(formatDate(dateStart(prop("期間")), "w"))))
解説
この関数を噛み砕いて見ていきましょう。
関数で日付を引数として扱う箇所は、便宜上ここでは「日付プロパティ」と表記しています。
dateBetween(dateEnd(prop("期間")), dateStart(prop("期間")), "days") + 1 - (2 * (toNumber(formatDate(dateEnd(prop("期間")), "w")) - toNumber(formatDate(dateStart(prop("期間")), "w"))))
登場する関数の意味は…
まずは、それぞれの関数がどのような計算を行っているかを把握しましょう。
関数 | 意味 |
---|---|
prop("期間") |
|
dateBetween(...) | 引数に日付プロパティを2つ連続して指定すると、3つ目の引数で指定した形式で2つの日付の間の日数を返します。 例: dateBetween(prop("開始日"), prop("終了日"), "days") |
dateStart(...) dateEnd(...) |
日付プロパティを1つ引数に指定すると、その日付プロパティに入力された値から、期間の開始日または終了日を返します。 例:日付プロパティに
|
formatDate(...) | 1つ目の引数に日付プロパティを、2つ目の引数に出力の形式を指定すると、その結果を数値ではなく文字列で返します。(見た目は数字に見えるものも、関数の算術演算(足し算など)に用いることができないデータ型である「文字列」の形式を取ります。) 例:日付プロパティに
|
toNumber(...) | 数字として表示されている文字列を、関数で計算に使える数値形式に直します。 例:上記の そこで |
簡単な人の言葉に直してみると…
日付プロパティにこのような期間が指定されている場合、関数の各パートでどのような計算がなされているかを見ていきます。
関数 | 人語に訳すと… |
---|---|
dateBetween(dateEnd(prop("期間")), dateStart(prop("期間")), "days") | 日付の引き算(終了日から、開始日を引いて、その日数を出力) |
+ 1 | +開始日を日数に含めるために1日 足す |
- (2 * | -(土日の日数を出すために2をかける |
(toNumber(formatDate(dateEnd(prop("期間")), "w")) | (数字に直す(文字列で出力する(終了日の、週番号を)) |
- toNumber(formatDate(dateStart(prop("期間")), "w")))) | -数字に直す(文字列で出力する(開始日の、週番号を)))) |
簡単な四則演算まで置き換えると…
Notion関数から人語に直し、そこからさらに平易な四則演算に直して行ってみましょう。プロパティに入力されている値は先ほどと同じものとします。
dateBetween(dateEnd(prop("期間")), dateStart(prop("期間")), "days") + 1 - (2 * (toNumber(formatDate(dateEnd(prop("期間")), "w")) - toNumber(formatDate(dateStart(prop("期間")), "w"))))
↓
日付の引き算(終了日から、開始日を引いて、その日数を出力)+開始日を日数に含めるために1日足す-(土日の日数を出すために2をかける(数字に直す(文字列で出力する(終了日の、週番号を))-数字に直す(文字列で出力する(開始日の、週番号を))))
↓
日付の引き算(9/25から、9/20を引いて、その日数を出力すると5)+1日-(2*(数字に直す(文字列で出力する(9/25の、週番号は39))-数字に直す(文字列で出力する(9/20の、週番号は38))))
↓
5+1-(2*(39-38))
=6-(2*1)
=6-2
=4
このようにして、2023/9/20~9/25の間の平日の日数が「4日」といったように、期間のうちの平日の日数が算出されます。