Php检查范围在2个时间变量之间
我在检查时间范围时遇到了一个问题 范例Php检查范围在2个时间变量之间,php,time,range,Php,Time,Range,我在检查时间范围时遇到了一个问题 范例 <?php $starthour = '08'; //Starting work hour $finishhour = '23'; //Finishing work hour $extrapaidhours = 0; //Counting extrapaying hours if($starthour <= 5) { if($starthour==5) { $extrapaidhours += 5; } else { $ex
<?php
$starthour = '08'; //Starting work hour
$finishhour = '23'; //Finishing work hour
$extrapaidhours = 0; //Counting extrapaying hours
if($starthour <= 5) {
if($starthour==5) { $extrapaidhours += 5; }
else { $extrapaidhours += 5 - $starthour; }
}
if($starthour > 22) {
$extrapaidhours += 24 - $starthour;
}
if($finishhour <= 5) {
if($finishhour==5) { $extrapaidhours += 5; }
else { $extrapaidhours += 5 - $finishhour; }
}
if($finishhour > 22) {
$extrapaidhours += 24 - $finishhour;
}
echo $extrapaidhours;
这是一个可能的解决方案
我们必须考虑两种不同的情况:
第一:$starthour<$finishhour->$starthour
和$finishhour
在同一天
第二:$starthour>$finishhour->$starthour
和$finishhour
在两个不同的日子
此解决方案仅使用一个if
/else
语句,其余语句使用max
/min
函数
<?php
$starthour = '08'; //Starting work hour
$finishhour = '23'; //Finishing work hour
$extrapaidhours = 0; //Counting extrapaying hours
if ($starthour < $finishhour)
$extrapaidhours += (min($finishhour,5)-min($starthour,5))
+ (max($finishhour,22)-max($starthour,22));
else
$extrapaidhours += (5-min(5,$starthour))
+ (24-max(22,$starthour))
+ min(5,$finishhour)
+(max($finishhour,22)-22);
echo $extrapaidhours;
?>
我喜欢使用不太流行的PHP函数和非标准方法:)
有(在PHP5.3和更高版本中)。有一个关于DateInterval的小文档,谷歌搜索了一些东西,但找不到合适的。实际上。它提供的是一个DateInterval
对象。
<?php
$start_hour = '19'; //Starting work hour
$finish_hour = '08'; //Finishing work hour
$extra_paid_hours = array(22, 23, 0, 1, 2, 3, 4, 5); //list of extra paid hours
if ($start_hour <= $finish_hour) {
$hours = range(intval($start_hour), intval($finish_hour));
} else {
$hours = array_merge(range(intval($start_hour), 23), range(0, intval($finish_hour)));
}
$extra_paid_hours_count = array_reduce($hours, function($accum, $hour) use($extra_paid_hours) {
$accum += in_array($hour, $extra_paid_hours) ? 1 : 0;
return $accum;
}, 0);
echo $extra_paid_hours_count;