日付範囲または二つの日付プロパティから日付範囲を作成: Notion Tips (75)

はじめに

Notion Tips の第75回目は私のタスクデータベースで利用している日付範囲作成用の Formula を解説します。これは、Notion Calendar にタスクの実動時間を表示するために利用しています。

Notion カレンダーにおけるタスク描画

私の Notion カレンダーには Tasks が二つ設定されています。一つは Tasks の Start date プロパティを描画しているものです。こちらは日付プロパティなので、Tasks を追加したり時間などを変更したりすることができます。ただし、普段は使っておらずこのように非表示にしています。

もう一つは CalendarViewOnly というビューの Tasks データベースです。こちらは NotionCalendarDate という Formula を描画しています。ただし、Formula なので変更することはできません。今回はこのフォーミュラについて解説します。

Notion Calendar

NotionCalendarDate の動作原理

日付が事前に決まっているタスクはカレンダーから登録されます。この時、Start date プロパティに開始時刻および終了時刻が設定されています。この場合、Formula にはそのまま日付範囲を設定します。

チェックボックスまたは Alfred をトリガーにしたオートメーションによりタスクが開始された時、Start date が現在時刻に設定され、Finish date が空に設定されます。この時、Formula には Start date が開始時刻、現在時刻が終了時刻となるように設定されます。

さらにタスクが完了されると、Finish date が現在時刻に設定されます。この時、Formula には Start date が開始時刻、Finish date が終了時刻となるように設定されます。

これを実現するために、_finishTime という中間日付プロパティを作成します。

_finishTime の Formula

終了時刻を上記の条件で設定する _finishTime は以下のような分類となりました。

  1. Finish date が存在 → Finish date を設定
  2. Finish date がなく、Start date が空か Start date に日付が設定されていない → Start date を設定
  3. Finish date がなく、Start date の終了時刻と開始時刻が等しい(終了時刻が設定されていない) → 現在時刻を設定
  4. Finish date がなく Start date の終了時刻と開始時刻が異なる → Start date の終了時刻を設定

数式は以下のようになりました。

lets(
    sd, prop("Start date"),
    fd, prop("Finish date"),
    hhmm, sd.formatDate("HHmm"),
    ifs(
        fd.empty().not(), fd,
      sd.empty() or hhmm == "0000", sd,
      sd.dateEnd() == sd.dateStart(), now(),
      sd.dateEnd()
    )
)

NotionCalendarDate の Formula

NotionCalendarDate は Start date の開始時刻と _finishTime の日付範囲を作成するだけです。

prop("Start date").dateRange(prop("_finishTime"))

正しく動作しているかはこちらで確認しています。スクリーンショットも掲載しておきます。 → 日付範囲または開始・終了日から日付範囲を得るには? | Notion

NotionCalendarDate の動作確認

おわりに

今回は、NotionCalendar の描画に必要な日付範囲を設定する Formula を解説しました。このような無駄なことをしないためには、Notion Calendar が開始・終了を別のプロパティで描画できるようになるか、オートメーションなどで日付範囲が設定できるようになるかのどちらかが必要です。できれば後者を実現してほしいですね。