如何使用php在一个时间范围内检查两次

时间:2016-10-29 05:36:49

标签: php time

我有两次像start_time和end_time,还有一个时间范围,比如开始时间和结束时间。我想检查start_time和end_time是否在开始时间和结束时间的范围内。怎么检查。

$start_time1 = 10:15 am; //! time table start time
$end_time1 = 12:30 pm;   //! time table end time

$strattime2 = 10:00 am; //! time range - start time
$endtime2 = 1:00 pm;   //! time range - end time

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

只需检查范围的边界即可。查询必须在范围之后或之后开始,并且必须在范围结束时或之前结束。所以

function check($queryStart, $queryEnd, $rangeStart, $rangeEnd) {
    return ($queryStart >= $rangeStart && $queryEnd <= $rangeEnd);
}

如果要检查查询是否与范围重叠,则应检查查询是在范围开始之前结束还是在范围结束后查询开始。

function overlap($queryStart, $queryEnd, $rangeStart, $rangeEnd) {
    return !($queryEnd < $rangeStart || $queryStart > $rangeEnd);
}

答案 1 :(得分:1)

  

您可以将所有时间转换为DateTime()个对象,然后像这样检查差异:

    <?php   

        function startStopTimeIsWithinRange($startTime='10:15', $stopTime='12:30') {                
            $dateStart      = new DateTime('2016-10-30 ' . $startTime);     //<== IGNORE, THE DATE. NOTICE THE TIME
            $dateStop       = new DateTime('2016-10-30 ' . $stopTime);      //<== IGNORE, THE DATE. NOTICE THE TIME

            $rangeStart     = new DateTime('2016-10-30 10:00');             //<== IGNORE, THE DATE. NOTICE THE TIME
            $rangeStop      = new DateTime('2016-10-30 13:00');             //<== IGNORE, THE DATE. NOTICE THE TIME

            if($dateStart >= $rangeStart && $rangeStop >= $dateStop){
                return true;
            }
            return false;               
        }

        var_dump( startStopTimeIsWithinRange('10:15', '12:30')  );           //<== NOTICE THE COLON (:) AND NOT DOT (.)