Alb*_*ert 7 php mysql time overlapping
我想看看我从数据库中读取的时间是否与用户提供的时间重叠.
我的数据库看起来像这样:
-----------------------------------------------
|organiser|meeting_start|meeting_end|boardroom|
-----------------------------------------------
| John Doe| 1340193600 | 1340195400| big |
-----------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
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';
Run Code Online (Sandbox Code Playgroud)
如果我故意键入两个重叠时间,它不会回显错误.我究竟做错了什么?
Emi*_*röm 25
当且仅当这些条件中的至少一个成立时,两个时间段P1和P2重叠:
P2.from <= P1.from <= P2.to)的开始和结束之间开始P1.from <= P2.from <= P1.to)的开始和结束之间开始这将捕获部分重叠的时期以及完全覆盖另一个时期的时期.如果它们重叠,则其中一个时段必须始终在另一个时段内开始(或结束).
所以$another_meeting定义为:
$another_meeting = ($from >= $from_compare && $from <= $to_compare) ||
($from_compare >= $from && $from_compare <= $to);
Run Code Online (Sandbox Code Playgroud)
<如果一个事件可以在与另一个事件完全相同的时间开始,您可能希望将边界情况更改为严格检查.
只是在做类似的事情......但只是随着时间......
$startTime = strtotime("7:00");
$endTime = strtotime("10:30");
$chkStartTime = strtotime("10:00");
$chkEndTime = strtotime("12:10");
if($chkStartTime > $startTime && $chkEndTime < $endTime)
{
// Check time is in between start and end time
echo "1 Time is in between start and end time";
}
elseif(($chkStartTime > $startTime && $chkStartTime < $endTime) || ($chkEndTime > $startTime && $chkEndTime < $endTime))
{
// Check start or end time is in between start and end time
echo "2 ChK start or end Time is in between start and end time";
}
elseif($chkStartTime==$startTime || $chkEndTime==$endTime)
{
// Check start or end time is at the border of start and end time
echo "3 ChK start or end Time is at the border of start and end time";
}
elseif($startTime > $chkStartTime && $endTime < $chkEndTime)
{
// start and end time is in between the check start and end time.
echo "4 start and end Time is overlapping chk start and end time";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7558 次 |
| 最近记录: |