開始時刻・終了時刻が別のプロパティの時に Notion Calendar に描画するには?: Notion Formula 解説 (24)

はじめに

Notion Formula の第24回目からは、逆引き Formula のネタを一つずつ解説していきたいと思います。最初は「開始時刻・終了時刻が別のプロパティの時に Notion Calendar に描画するには?」にしました。金曜日の Notion 座談会でも質問を受けたためです。逆引きの記事はこちらです。

開始時刻・終了時刻が別のプロパティの時に Notion Calendar に描画するには?

数式

早速、使われている数式を見てみます。一行ずつにコメントがついているので、難しくはないと思いますが、これまで解説した関数の復習も兼ねて一つずつ見てみましょう。

lets(
    /* 終了時刻と開始時刻の終了時刻を並べたリストを作成 */
    array, [prop("終了時刻"), prop("開始時刻").dateEnd()],
    /* リストのうち空でないものの先頭を end に設定 */
    ed, array.filter(current).first(),
    /* 開始時刻と選択された方の終了時刻で日付範囲を作成 */
    prop("開始時刻").dateRange(ed)
)

サンプルデータは以下のようになっています。3つの異なる場合について、うまく動作していることを確認しています。A, B, C のそれぞれの場合において途中結果がどのようになっているかを確認しながら解説していきます。

日付範囲

  1. 最初の行は lets です。計算結果を後で参照しやすいように細かい単位ごとに変数に代入していきます。最後に評価した値がこの関数の返り値になります。

     lets(
     )
    
  2. 次の行は array というリストを作成しています。ここでは終了時刻プロパティと開始時刻プロパティの終了時刻を並べています。結果は以下のようになります。

         /* 終了時刻と開始時刻の終了時刻を並べたリストを作成 */
         array, [prop("終了時刻"), prop("開始時刻").dateEnd()],
    
    名前 array
    A [2023年9月3日, 2023年9月1日]
    B [Empty, 2023年9月2日]
    C [Empty, 2023年9月4日]
  3. 次の行は ed という時刻を作成しています。ここでは最初に filter(current) で空の要素を取り除き、その後その先頭を取得します。

         /* リストのうち空でないものの先頭を end に設定 */
         ed, array.filter(current).first(),
    
    名前 filter(current) ed
    A [2023年9月3日, 2023年9月1日] 2023年9月3日
    B [2023年9月2日] 2023年9月2日
    C [2023年9月4日] 2023年9月4日
       /* 開始時刻と選択された方の終了時刻で日付範囲を作成 */
         prop("開始時刻").dateRange(ed)
    
  4. 最後に開始時刻に ed を連結した日付範囲が返却されます。

       /* 開始時刻と選択された方の終了時刻で日付範囲を作成 */
         prop("開始時刻").dateRange(ed)
    
    名前 filter(current)
    A 2023年9月1日 → 2023年9月3日
    B 2023年9月2日 → 2023年9月2日
    C 2023年9月2日 → 2023年9月4日

おわりに

今回は、開始時刻・終了時刻を別々のプロパティに設定している時に、Notion Calendar に描画するプロパティを数式で作成する方法を解説しました。開始時刻のプロパティによる編集用カレンダーと、このプロパティの結果による閲覧用カレンダーを二つ用意すると便利になります。是非試してみてください。