数カ月前にをPHPで予約システム制作する機会があったのですが、予約枠どうしが重複しないかチェックしなければならない何度か場面がありました。
よくあるホテルの部屋の予約システムや、座席の予約、病院の予約などのあれです。
例えば新規で新たに予約する際など、予約時間帯が既存の予約枠と衝突しないかをチェックする必要がありました。でも二つの時間がかぶるかどうかを判定するのってどうやるんだと思って結構悩みました…。
恐らく愚直に判定しようとすると &&
や ||
を複数個並べた判定になると思うのですが、最近とても簡潔に書けることを知りました/(^o^)\
実際のコードサンプルは以下です。引数は全て整数のUNIXタイムスタンプを想定しています。
/** * 2つの時間帯が重複しているかをチェックする * * @param int $startTime1 一つ目の時間範囲の開始時間 * @param int $endTime1 一つ目の時間範囲の終了時間 * @param int $startTime2 二つ目の時間範囲の開始時間 * @param int $endTime2 二つ目の時間範囲の終了時間 * @return bool 重複している場合はtrueを返す */ function isTimeDuplication($startTime1, $endTime1, $startTime2, $endTime2) { return ($startTime1 < $endTime2 && $startTime2 < $endTime1); } $startTime1 = strtotime('2011/11/25 10:00:00'); $endTime1 = strtotime('2011/11/25 11:00:00'); $startTime2 = strtotime('2011/11/25 10:30:00'); $endTime2 = strtotime('2011/11/25 11:30:00'); $isDuplicate = isTimeDuplication($startTime1, $endTime1, $startTime2, $endTime2); //重複しているので真が返る