📅

日付範囲の間隔を30分単位で計上するには

属性名
差分数値、表示用
返り値
Float
逆引きNotionDB
関連するもの
日付プロパティには、開始時間と終了時間を設定できます。Notion kyoto の何でも相談で、「範囲の終了時間を取得するのは」という話だったので、start と end で計算できますという返事をしました。その後、勤務時間などを保存したものを30分単位で計算したいという話題になったので、面白いネタだと思ってここの記事にしてみました。
  1. 計算用にまず数値として計算します。start, end で取り出したそれぞれの日付データを dateBetween で分単位の数値にします。30分単位で計上したいとのことだったので、30 で割ったのちに切り捨てをします。時間単位の方がわかりやすいので、最後に 2 で割りました。これを差分数値という属性にします。
    1. floor(dateBetween(end(prop("Date")), start(prop("Date")), "minutes") / 30) / 2
  1. 表示が数値だと味気ないので、文字列に変換します。:00を作成するために100分を足して下2桁を抜き出しています。二択なので if 文にしてもいいんですが、15分単位などに拡張できるようにちゃんと処理しました。当初は fromTimestamp と formatDate でできると思ったのですが、JST の時差の +9:00 が付与されてしまったので、諦めました。
    1. concat(format(floor(prop("差分数値"))), ":", slice(format(mod(prop("差分数値") * 60, 60) + 100), 1))
  1. JST 決めうち、かつ 24時間以内のものだけに限定すると、9時間オフセットの補数である15時間を加算することで、formatDate が使えます。H:mm で記述しているので、24時間以内のものに限られてしまいます。やはり 2 の方法が順当でした。
    1. formatDate(dateAdd(fromTimestamp(prop("差分数値") * 3.6e+6), 15, "hours"), "H:mm")
       
日付範囲
名前
Date
差分数値
表示用
表示用(JST決めうち)
NaN
NaN:aN
NaN
NaN:aN
Feb 25, 2022 → Feb 26, 2022
NaN
NaN:aN