当前位置: 首页 > 面试题库 >

检查两次是否重叠

张英范
2023-03-14
问题内容

我想看看我从数据库读取的时间是否与用户提供的时间重叠。

我的数据库如下所示:

-----------------------------------------------
|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重叠:

  1. P1在P2的开始和结束之间开始(P2.from <= P1.from <= P2.to
  2. P2在P1的开始和结束之间开始(P1.from <= P2.from <= P1.to

这将捕获部分重叠的期间以及一个完全覆盖另一个期间的期间。如果两个周期重叠,则其中一个周期必须始终在另一个周期内开始(或结束)。

因此$another_meeting定义为:

$another_meeting = ($from >= $from_compare && $from <= $to_compare) ||
                   ($from_compare >= $from && $from_compare <= $to);

您可能希望将边界情况更改为严格<检查,以确保一个事件是否可以与另一个事件完全在同一时间开始。



 类似资料:
  • 问题内容: 我有两个日期范围,(start1,end1)::: >> date1 &&(start2,end2)::: >> date2。 我想检查两个日期是否为OverLaped。 我的流程图 假定“ <> =”运算符对于比较是有效的。 } 任何建议将不胜感激。 问题答案: 您可以为此使用Joda-Time。 它提供指定开始时刻和结束时刻的类,并可以检查与的重叠。 就像是 版画 因为第一个间隔的

  • 问题内容: 有没有办法检查两个(非平凡的)选择是否等效? 最初,我希望两个选择在形式上等效,但是proving-sql-query-equivalency中的答案使 我停滞不前。 对于我的实际需要,我可以只检查两个选择的(实际)结果是否相同。 问题答案: 如果要比较查询结果,请尝试以下操作: 这将导致所有行仅由查询之一返回。

  • 我有经度和纬度的地理坐标,比如西北和东南经度/纬度。所以,当我得到它们的时候,我把它们转换成公制。因此,这里我得到了我的第一个西北和东南坐标的矩形,然后我有了北,南,西,东坐标的相同公制中的边界矩形。我需要检查这两个直角相交的边,我写的是: 我不确定我做得对不对?我的要求是,如果第二个矩形的边界与第一个矩形的边界相交,那么第二个必须留在左边。否则,过滤。

  • 问题内容: 我需要检查数据库中是否还有两个日期和另外两个日期。 我的数据库看起来像这样 在我的查询中,我指定范围:开始日期和结束日期让我们对其进行如下分配: 上面应该归还我所有的记录,因为所有的时间都超过了时间跨度。 但是我无法使查询工作:/ 我已经尝试了以下查询,但是没有运气: 这将返回两个结果: 1和3 我究竟做错了什么? 问题答案: 我相信以下条件会匹配所有可能的重叠情况。 除非您声明了非逻

  • 我试图找出两个矩形是否相互重叠。我将下面的矩形表示为< code>[x1,x2] x [y1,y2] 我只需要一个伪代码,我可以实现它来查找矩形是否彼此重叠。

  • 问题内容: 我收到了2个轮廓(和)。我怎么知道它们是否相交?我不需要坐标,我只需要一个布尔值或。 我尝试了不同的方式,并且已经尝试与 …但是得到的错误是数组没有方法“ Area()” 问题答案: 一旦有了的两个轮廓,就可以使用按位运算来检测相交。具体来说,我们可以使用。想法是为每个轮廓创建两个单独的图像,然后对它们使用逻辑运算。具有正值(或)的任何点都将是交点。因此,由于您只想获取是否存在相交的布