calc the working hours between 2 dates in PHP

前端 未结 3 1297
南方客
南方客 2020-12-03 23:49

I have a function to return the difference between 2 dates, however I need to work out the difference in working hours, assuming Monday to Friday (9am to 5:30pm):

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-04 00:34

    As the old saying goes "if you want something done right do it yourself". Not saying this is optimal but its atleast returning the correct amount of hours for me.

    function biss_hours($start, $end){
    
        $startDate = new DateTime($start);
        $endDate = new DateTime($end);
        $periodInterval = new DateInterval( "PT1H" );
    
        $period = new DatePeriod( $startDate, $periodInterval, $endDate );
        $count = 0;
    
          foreach($period as $date){
    
               $startofday = clone $date;
               $startofday->setTime(8,30);
    
               $endofday = clone $date;
               $endofday->setTime(17,30);
    
        if($date > $startofday && $date <= $endofday && !in_array($date->format('l'), array('Sunday','Saturday'))){
    
            $count++;
        }
    
    }
    
    //Get seconds of Start time
    $start_d = date("Y-m-d H:00:00", strtotime($start));
    $start_d_seconds = strtotime($start_d);
    $start_t_seconds = strtotime($start);
    $start_seconds = $start_t_seconds - $start_d_seconds;
    
    //Get seconds of End time
    $end_d = date("Y-m-d H:00:00", strtotime($end));
    $end_d_seconds = strtotime($end_d);
    $end_t_seconds = strtotime($end);
    $end_seconds = $end_t_seconds - $end_d_seconds;
    
    $diff = $end_seconds-$start_seconds;
    
    if($diff!=0):
        $count--;
    endif;
    
    $total_min_sec = date('i:s',$diff);
    
    return $count .":".$total_min_sec;
    }
    
    $start = '2014-06-23 12:30:00';
    $end = '2014-06-27 15:45:00';
    
    $go = biss_hours($start,$end);
    echo $go;
    

提交回复
热议问题