假設,檢查一個PHP時間(H:I:S)位於兩次(H:I:S)之間
$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時間(H:I:S)位於兩次(H:I:S)之間
$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
的所有範圍的數組。
這應該給你一個方法
$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;
}
}
注:受上述@Jimmery答案的啓發。
你可以把它放到它返回匹配範圍或假功能 - 另外它有小的優勢,它與第一場比賽停止:
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;
}
這應該工作。
<?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正確的,因爲沒有日期包括在內。
我將'$ target'初始化移出循環,因爲它在期間保持不變。 – NDM