Date
DefaultScheduler は dateChrono を使用します。時刻の schema は有効な Date オブジェクトを受け付けるため、保存した文字列やタイムスタンプは、スケジューラーに渡す前に Date に変換してください。現在の schema は new Date(0)(Unix エポックちょうどの時刻)と無効な日付も受け付けません。
スケジューラーの config 直下に fractionalDays を指定します(デフォルトは false)。直接呼ぶ場合は dateChrono.create({ config: { fractionalDays: false } }) とします。false では同じ UTC 日付内の差はゼロで、23:00 から翌日01:00 の差は1日です。true ではこの2時間は 2 / 24 日になります。add(from, 0.5) は常に12時間を加算します。正確な前後比較には compare を使ってください。
normalize とスケジューリング
normalize は card または revlog のフィールドを { previous, current } に変換します。Date と Temporal のプリセットでは、次のように使われます。
- 復習時の normalize は
previous: card.lastReviewAtとcurrent: card.dueAtを返します。 - 経過日数は
difference(previous ?? current, now)です。New カードでは常にゼロです。 - 新しい card は
dueAt: add(now, interval)とlastReviewAt: nowを保存します。 - revlog は復習前の card の
dueAt、lastReviewAtと、今回のreviewTime: nowを保存します。 - ロールバック時は
previous: revlog.lastReviewAtとcurrent: revlog.dueAtを返し、復習前の時刻フィールドを復元します。New カードのlastReviewAtはnullに戻ります。
プリセットを実行する
UTC の日付をまたぐと日付差は1日になります。半日を加算すると、時刻は12時間後に進みます。