检查PHP时间(H:i:s)驻留两次(H:i:s)

时间:2013-08-22 07:35:25

标签: php

假设,

$at_time = '07:45:00';

$ranges = [
   ['start' => '09:00:00', 'end' => '17:00:00'],
   ['start' => '17:00:00', 'end' => '08:59:00']
];

现在我想检查$ranges是否包含$at_time

4 个答案:

答案 0 :(得分:4)

我的PHP有点生疏,但尝试类似:

$matches=Array();

foreach($ranges as $i=>$ikey){
    if(strtotime($ranges[$i]['start']) < strtotime($at_time) && strtotime($ranges[$i]['end']) > strtotime($at_time)){
         array_push($matches,$i);
    }
}

然后$matches将包含包含$at_time的所有范围的数组。

答案 1 :(得分:3)

注意:受上面@Jimmery答案的启发。

你可以将它放入一个返回匹配范围 false 的函数中 - 此外它还有一个小优势,它在第一场比赛时停止:

function timeInRange($at_time,$ranges)
{
    foreach($ranges as $i=>$ikey)
    {
        if(strtotime($ranges[$i]['start']) < strtotime($at_time) && strtotime($ranges[$i]['end']) > strtotime($at_time))
        {
            return $i;
        }
    }
    return false;
}

答案 2 :(得分:3)

这应该有效。

<?php

function arrayContainsTime($time, $ranges) {
    $target = strtotime($time);
    foreach($ranges as $range) {
        $start  = strtotime($range['start']);
        $end    = strtotime($range['end']);

        if($target > $start && $target < $end) {
            return 1;
        }
    }
    return 0;
}

$at_time      = '07:45:00';
$another_time = '10:30:45';

$ranges = [
   ['start' => '09:00:00', 'end' => '17:00:00'],
   ['start' => '17:00:00', 'end' => '08:59:00']
];


echo $at_time, " match? ", arrayContainsTime($at_time, $ranges);
echo "<br>";
echo $another_time, " match? ", arrayContainsTime($another_time, $ranges);

See it in action here!

注意:它不会检测到17:00:00 - &gt; 08:59:00正确,因为没有包含日期​​。

答案 3 :(得分:1)

这应该给你一个方法

$time = str_replace(":","",$at_time);
foreach($ranges as $rangleval){
    $start = str_replace(":","",$rangleval['start']);
    $end = str_replace(":","",$rangleval['end']);
        if($start<=$time && $end>=$time){
            echo $at_time." lies between ".$rangleval['start']." and ".$rangleval['end'];
            break;
        }
    }