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("期間")

期間 と名付けた日付プロパティを意味する表現です。関数の編集欄(Excelでいう数式バーのような箇所)に入力すると、プロパティ名にグレー背景が付いた状態の表記となり、prop() は表示されなくなる仕様です。(以下のGIFでは、閉じの括弧を入力した瞬間に表示が変わっているのが分かります。)

dateBetween(...)

引数に日付プロパティを2つ連続して指定すると、3つ目の引数で指定した形式で2つの日付の間の日数を返します。

例: dateBetween(prop("開始日"), prop("終了日"), "days")


dateStart(...)

dateEnd(...)

日付プロパティを1つ引数に指定すると、その日付プロパティに入力された値から、期間の開始日または終了日を返します。

例:日付プロパティに 2023/01/01→2023/02/01 と入力されている場合

  • dateStart("日付プロパティ名") = 2023/01/01
  • dateEnd("日付プロパティ名") = 2023/02/01

formatDate(...)

1つ目の引数に日付プロパティを、2つ目の引数に出力の形式を指定すると、その結果を数値ではなく文字列で返します。(見た目は数字に見えるものも、関数の算術演算(足し算など)に用いることができないデータ型である「文字列」の形式を取ります。)

例:日付プロパティに 2023/9/20 と入力されている場合

  • formatDate(prop("日付プロパティ名"), "YY-MM-D") = 23-09-20

    … 指定した形式で日付を出力しています。

  • formatDate(prop("日付プロパティ名"), "w") = 38

    …1番目の引数の日付がその年の何週目かを表しています。


toNumber(...)

数字として表示されている文字列を、関数で計算に使える数値形式に直します。

例:上記の formatDate(prop("日付プロパティ名"), "w") は「38」という出力になりますが、これは文字列であるため、このままでは計算には使えません。

そこで toNumber(formatDate(prop("日付プロパティ名"), "w")) というように toNumber() 関数に入れ子にすると、「38」という文字列を数値形式の情報に変換することができます。





簡単な人の言葉に直してみると…


日付プロパティにこのような期間が指定されている場合、関数の各パートでどのような計算がなされているかを見ていきます。

関数 人語に訳すと…
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日」といったように、期間のうちの平日の日数が算出されます。

記事を評価 ありがとうございます! 失敗しました