<?PHP
function forlough_hm2s($time,&$error=null){
if(empty($time)) {
$error = "\$time is empty";
return false;
}
if($time != date('H:i',strtotime($time))) {
$error = '$time format is error';
return false;
}
$time = array_filter(explode(':',$time));
$h = array_shift($time);
$m = array_shift($time);
return intval($h)*3600+intval($m)*60;
}
function forlough_time2hour($len=0){
if($len>3600*8){
return 8;
}
return bcdiv($len,3600,1);
}
function forlough_count($startTime,$endTime){
$on_scope='09:00';
$off_scope='17:30';
$on_scope = forlough_hm2s($on_scope) ;
$off_scope = forlough_hm2s($off_scope) ;
$startTime = strtotime($startTime);
$endTime = strtotime($endTime);
if($startTime>$endTime){
list($endTime,$startTime)=[$startTime,$endTime];
}
$start_date = date('Y-m-d',($startTime));
$start_time = date('H:i',($startTime));
$end_date = date('Y-m-d',($endTime));
$end_time = date('H:i',($endTime));
$day_half = 4*3600;
$day_full = 8*3600;
$tmp = null;
$hour = 0;
while(1){
if(empty($tmp)){
$tmp = $start_date;
}else{
$tmp = date('Y-m-d',strtotime($tmp.'+1day'));
}
if(strtotime($tmp)>strtotime($end_date)) break;
if($tmp == $start_date && $tmp == $end_date){
$s_time = forlough_hm2s($start_time);
$e_time = forlough_hm2s($end_time);
$v = $end_time-$s_time;
var_dump($v);
$hour += forlough_time2hour($v);
continue;
}
if(strtotime($tmp)>strtotime($begin) && strtotime($tmp)<strtotime($end)){
$hour+=8;
continue;
}
if( strtotime($tmp)>strtotime($begin) && strtotime($tmp)==strtotime($end) ){
$s_time = $on_scope;
$e_time = forlough_hm2s($end_time);
$hour += forlough_time2hour($end_time-$s_time);
continue;
}
}
}
$list = [
['start'=>'2024-10-16 09:00','end'=>'2024-10-16 17:30','val'=>'0'],
['start'=>'2024-10-16 08:00','end'=>'2024-10-16 18:30','val'=>'0'],
['start'=>'2024-10-19 09:00','end'=>'2024-10-16 14:30','val'=>'0'],
];
foreach($list as $v){
echo "{$v['start']}~{$v['end']}=>".forlough_count($v['start'],$v['end']),PHP_EOL;
}