実現したいこと
予約やスケジュール管理で、新しい予定が、すでにある予定と時間帯の重複が無いようにしたい
条件式
**** 条件式 ****
(os <= ns && ns < oe) || (ns <= os && os < ne)
*******************
※ポイント
=の有無。
終了時間と別の開始時間が同時間でも良い場合です。
インターバルが必要な場合は=を入れないといけませんね。
**** 新しい予定 ****
開始時間: newStart -> 変数名 ns
終了時間: newEnd -> 変数名 ne
*******************
**** すでにある予定 ****
開始時間: oldStart -> 変数名 os
終了時間: oldEnd -> 変数名 oe
*******************
イメージ
新しい予定、すでにある予定の開始時間に注目して、その開始時間が他方の開始時間と終了時間の間にあったらFalseを返したいというイメージです。
新しい予定とすでにある予定のパターン
OKパターンとNGパターンの2種類です。
いずれも注目しているのは開始時間です。
使い所
Spring Bootを使った開発の際に使った条件式ですが、フロント側でもJavaScriptで使用しました。
書き方は違えど言語が変わっても同じ条件式になろうかと思います。
JavaScriptで実装したのは、filterメソッドの中で使いました。これで重なっているものとそうでないものを振り分けました。
あまり調べても出てこなかった・・・
結構悩んだんですよね。イメージではわかっていても、開始時間にだけ注目すれば良いということに気づくのにかなりかかりました。
誰かの参考になればと思います。
冗長な条件式だなとは感じましたが、こんなものか???
なにか別の良い実装方法をご存じの方がいらっしゃいましたらコメント下さいm(__)m