逆引きFormula 2.0 に戻る

Slack で以下の質問を受けました。

「今日のタスク」というデータベースを作成したいのですが、、、難しい、、、、例えば、タスク1

開始日8/24〜終了日8/31と指定した場合、その期間中の今日(8/30)に掛かるものをフィルターかformulaで抽出するのは出来ますか?

時間を含まない場合、範囲でのチェックが難しいためです。時間を含まない場合には、終了時刻を翌日の0:00 にして、その時刻と比較することで範囲内かどうかをチェックできます。

  1. 終了時刻の取得を確認します。時間が設定されていない時(0:00の時)に終了時刻の翌日の0:00 にします。0:00かどうかの判定ですが、時間と分の和が0になるのは0:00しかないので、比較は一つだけで済んでいます。

    /* 日付範囲プロパティの終了時刻を変数 et に代入 */
    let(et, prop("日付範囲").dateEnd(),
     /* et が 0:00 の時には翌日の 0:00 に設定 */
     et.hour() + et.minute() == 0 ? et.dateAdd(1, "days") : et
    )
    

    dateEndhourminute+, add==, equaldateAdd

  2. 範囲内?(動作確認版): now() を使うとテストできないので、動作確認用にチェック日付で書いたものです。上の終了時刻より前かどうかをチェックしています。

    /* チェック日付を cd に代入 */
    let(cd, prop("チェック日付(now()に変える)"),
     /* 日付範囲の開始時刻から事前準備した終了時刻の間に入っているかを確認 */
     (cd >= prop("日付範囲").dateStart()) and (cd < prop("終了時刻"))
    )
    

    >=dateStart&&, and<

  3. 範囲内?: 実際に使うものはこちらです。

    lets(
     /* 日付範囲プロパティの開始時刻を変数 st に代入 */
     st, prop("日付範囲").dateStart(),
     /* 日付範囲プロパティの開始時刻を変数 st に代入 */
     et, prop("日付範囲").dateEnd(),
     /* 終了時刻の調整(日付のみの場合に一日後に変更) */
     ret, et.hour() + et.minute() == 0 ? et.dateAdd(1, "days") : et,
      /* 日付範囲の開始時刻から事前準備した終了時刻の間に入っているかを確認 */
      (now() >= st) and (now() < et)
    )
    

    dateStartdateEndhourminute+, add==, equaldateAddnow>=&&, and<

日付範囲確認