はじめに
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 つのパターンの出力を得ます。
- 日付が設定されていないか、日付のみが設定されている →
"---"
を出力 - 今日のタスクではない →
"---"(0:59)
と出力。 ()内はタスク時間 - 今日のタスクですでに開始時刻が過ぎている →
10:00-10:53 (0:53)
と出力。タスクが実行中であれば終了時刻の部分には現在時刻を表示 - 今日のタスクでまだ開始時刻になっていない →
あと0:20 (11:00- )
おわりに
今回は私のタスクデータベースのタイムラインビューに表示されている Display status を解説しました。Formula 2.0 までは lets がなかったのでプロパティを大量に用意するなどする必要があり、かなり大変でした。Formula 2.0 では lets により大量の変数が一括で定義できるので、かなり読みやすく記述できるようになっています。