假设,
$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
。
答案 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);
注意:它不会检测到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;
}
}