我想看看我从数据库读取的时间是否与用户提供的时间重叠。
我的数据库如下所示:
----------------------------------------------- |organiser|meeting_start|meeting_end|boardroom| ----------------------------------------------- | John Doe| 1340193600 | 1340195400| big | -----------------------------------------------
我的代码如下所示:
date_default_timezone_set('Africa/Johannesburg'); $from = strtotime($_GET['meeting_date'] . ' ' . $_GET['meeting_start']); $to = strtotime($_GET['meeting_date'] . ' ' . $_GET['meeting_end']); $another_meeting = false; $meeting_date = strtotime($_GET['meeting_date']); $meeting_next = $meeting_date + 86400; $result = mysql_query("SELECT meeting_start, meeting_end FROM admin_boardroom_booking WHERE boardroom = '" . $_GET['boardroom'] . "' AND meeting_start >= '" . $meeting_date . "' AND meeting_end < '" . $meeting_next . "'")or die(mysql_error()); while($row = mysql_fetch_array($result)) { $from_compare = $row['meeting_start']; $to_compare = $row['meeting_end']; $intersect = min($to, $to_compare) - max($from, $from_compare); if ( $intersect < 0 ) $intersect = 0; $overlap = $intersect / 3600; if ( $overlap <= 0 ) { $another_meeting = true; break; } } if ($another_meeting) echo 'ERROR';
如果我故意输入两次重叠的时间,则不会回显错误。我究竟做错了什么?
当且仅当以下条件中的至少一个成立时,两个时间段P1和P2重叠:
P2.from <= P1.from <= P2.to
P1.from <= P2.from <= P1.to
这将捕获部分重叠的期间以及一个完全覆盖另一个期间的期间。如果两个周期重叠,则其中一个周期必须始终在另一个周期内开始(或结束)。
因此$another_meeting定义为:
$another_meeting
$another_meeting = ($from >= $from_compare && $from <= $to_compare) || ($from_compare >= $from && $from_compare <= $to);
您可能希望将边界情况更改为严格<检查,以确保一个事件是否可以与另一个事件完全在同一时间开始。
<