认为,
$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
。
认为,
$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
。
我的 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
。
这应该有效。
<?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 -> 08:59:00,因为没有包含日期。
注意:受上述@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;
}
这应该给你一个方法
$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;
}
}