2日間に渡って、
- 指定された日時が、動作させる日時なのか
- 指定された時間帯が、予約できる時間帯なのか
を判定する方法を書きました。
ajya.hatenablog.jp
ajya.hatenablog.jp
この2つの判定に新たな判定を加えて、動作の予定を予約できる時間に自動でずらすロジックを考えます。
動作の予定を自動で調整して予約したい
指定された日時に動作をさせたいが、既に予約されていたなら、日時を自動でずらして予約するロジックが必要になりました。
これまでの2つの判定で、予約したい時間帯が、
- 予約したい時間帯の開始日時が、動作させる日時なのか
- 予約したい時間帯の終了日時が、動作させる日時なのか
- 予約したい時間帯が、予約できる時間帯なのか
を判定できます。
予約したい時間帯が上記を満足すれば、予約を追加する処理を行えば終わります。
どれかを満足しなかった場合、自動で予約したい時間帯を調整します。
予約したい時間帯の開始日時、あるいは予約したい時間帯の終了日時が、動作させる日時ではなかった場合
予約したい時間帯の終了日時を基点にして、次の動作させる日時の開始の日時を求めれば、予約の開始日時をずらせ、合わせて予約の終了日時もずらせます。
予約したい時間帯が、予約できる時間帯ではなかった場合
予約済の時間帯と重なっていると判定した際の、予約の終了日時に、予約の開始日時をずらせば、予約の終了日時もずらせます。
3つの判定それぞれで、判定の条件に利用した「終了の日時」を元に、新たな「開始の日時」を求めることで、時間をずらしていきます。
全ての条件を満足するようになれば、確定です。
この方法で予約の時間をずらしていけば、当初の予約したい時間帯より後になりますが、自動で調整して予約がきるようになります。
できれば当初の予約したい時間帯のまま予約したいけれど、条件に合わなければ後の日時になってもいいので予約したいという場合に対応できます。