タスクの状態表示文字列の作成: Notion Tips (87)

はじめに

Notion Tips の第87回目は私のタスクの状態表示文字列の作成について解説します。

_finishTime (既出)の作成

タスクの終了時刻を日付範囲の終了時刻、finishDate プロパティ、現在時刻のいずれかから取得する _finishTime については、こちらで紹介していましたので説明は省略します。

https://hkob.hatenablog.com/entry/2024/09/06/050000

_taskTime の作成

_taskTime は開始時刻と終了時刻の間の分数を取得する数式です。

prop("_finishTime").dateBetween(prop("Start date").dateStart(), "minutes")

Display status の作成

今回のタスクの状態表示文字列を表示する Display status は以下のような数式になります。かなり長いので、一つの変数ごとに解説します。

lets(
    hhmm, prop("Start date").formatDate("HH:mm"),
    period, 
      (prop("_taskTime") * 60000)
        .fromTimestamp()
        .dateAdd(15, "hours")
        .formatDate("(H:mm)"),
    st_day_str, prop("Start date").formatDate("YYYY-MM-DD"),
    now_day_str, now().formatDate("YYYY-MM-DD"),
    st_hm_str, prop("Start date").formatDate("H:mm"),
    ft_hm_str, prop("_finishTime").formatDate("H:mm"),
    ts, prop("Start date").dateStart().dateBetween(now(), "minutes") * 60000,
    time_str, ts.fromTimestamp().dateAdd(15, "hours").formatDate("H:mm"),
    ifs(
            prop("Start date").empty() or hhmm == "00:00", "---",
            st_day_str != now_day_str, ("---" + period),
            prop("Start date").dateStart() < now(), st_hm_str + "-" + ft_hm_str + period,
            "あと" + time_str + "(" + st_hm_str + "- )"
    )
)
  • hhmm: 開始時刻を HH:mm フォーマットにしたもの (00:00 なら時刻が設定されていない)
  • period: 上で計算した _taskTime を (H:mm) フォーマットにしたもの。日本時間の 9 時間のオフセットとなる 15 時間を足すことで 1970年1月2日の 0:00 からの分数になります。これを formatDate で表示することでタスクの実作業時間文字列が作成できます。
  • st_day_str: Start date の日付部分のみを文字列にしたもの
  • now_day_str: 現在時刻の日付部分のみを文字列にしたもの (st_day_str と比較することで今日かどうかを判断できる)
  • st_hm_str: 開始時刻の H:mm フォーマット
  • ft_hm_str: 上で計算した _finishTime の H:mm フォーマット
  • ts: 開始時刻と現在時刻の差を miliseconds で取得したもの
  • time_str: period と同様に ts を H:mm フォーマットにしたもの

これらの変数から以下の 4 つのパターンの出力を得ます。

  1. 日付が設定されていないか、日付のみが設定されている → "---" を出力
  2. 今日のタスクではない → "---"(0:59) と出力。 ()内はタスク時間
  3. 今日のタスクですでに開始時刻が過ぎている → 10:00-10:53 (0:53) と出力。タスクが実行中であれば終了時刻の部分には現在時刻を表示
  4. 今日のタスクでまだ開始時刻になっていない → あと0:20 (11:00- )

おわりに

今回は私のタスクデータベースのタイムラインビューに表示されている Display status を解説しました。Formula 2.0 までは lets がなかったのでプロパティを大量に用意するなどする必要があり、かなり大変でした。Formula 2.0 では lets により大量の変数が一括で定義できるので、かなり読みやすく記述できるようになっています。