見出し画像

Notionで締切までの日数を計算するときにdateBetweenが厄介だった話


やりたいこと

設定した日付"期限"と、今日の日付の差分をとって

・”期限”が未入力  → 締切未設定
・”期限”は明日以降 → 締切まであとXX日
・”期限”は今日   → 本日が締切です
・”期限”は昨日以前 → 締切をXX日過ぎています

と表示する

最終的なコード

ifs(empty(prop("期限")),"締切未設定",formatDate(now(),"YYYYMMDD")==formatDate(prop("期限"),"YYYYMMDD"),"本日が締切です",dateBetween(prop("期限"),now(),"days")+1>0,"締切まであと"+format(dateBetween(prop("期限"),now(),"days")+1)+"日","!!締切を"+format(abs(dateBetween(prop("期限"),now(),"days")))+"日超過!!")

これをプロパティ→数式を選んで貼り付ければ動くはず。締め切り日を”期限”と命名しているのに注意。

カレンダーに表示してみた


dateBetweenの罠

2つの日付を指定し、その差分をとるdateBetweenには隠された仕様が存在する。

dateBetween(prop("期限"),now(),"days") //期限の日付と、今日の日付の差分

上記のプロパティを適応した結果はこうなる

dateBetweenの返り値

そう、明日が期限の予定が0で、更にややこしいのは今日と明日の数値が変わらず0になっている!

しかし昨日以前に関しては良い感じだ。absで絶対値をとればそのまま、”締め切り日をXX日超過しています”と表せる。

 よってやるべきことは二つ。
・今日と明日を区別して、今日が締め切りの場合は例外処理
・明日以降の数値を+1して、直感に合わせる

if(formatDate(now(),"YYYYMMDD")==formatDate(prop("期限"),"YYYYMMDD"),"Today","NotToday")
例外処理のための判定

今日かどうかの判定は、==を使ってやった。この時にformatDateを使用すると、日付の表示を統一してくれる。第二引数に文字列の形で指定するのだが、"YYYYMMDD"とすれば"20240825"みたいに変形してくれる。HHとかmmとかを入れれば時間・分まで分かるが、知りたいのは日付だけなのでこの8桁同士で計算すれば問題ないだろう。

参考にしたサイト・記事


いいなと思ったら応援しよう!