dtrz17917 2012-09-11 16:42
浏览 70
已采纳

在php中减去两个给定时间的非工作时间和天数

I want to calculate the total hours and minutes between two given times.

The condition is I want to calculate only working hours i.e. from 09:30 to 18:00 Hrs and also want to exclude saturdays and sundays if they lie between the two times given

  • 写回答

2条回答 默认 最新

  • dongmao7195 2012-09-12 16:22
    关注
    function calcTime($startTime,$endTime){
    //==1.===Time Diff D,H,M,S===========
    $diff=diffInTime($startTime,$endTime);
    //==2.===Time Separation=============
    $sep=explode(",",$diff);
    $days=$sep[0];
    $hours=$sep[1];
    $mins=$sep[2];
    $secs=$sep[3];
    
    $totSecs=($days*24*60*60)+($hours*60*60)+($mins*60)+$secs;
    
    $invalidTime=$days*((15*3600)+1800);
    
    //$mor=strtotime('09:30:00');
    //$eve=strtotime('18:00:00');
    
    $mor=(9*3600)+1800;
    $eve=18*3600;
    
    echo "invalidtime".$invalidTime."<br>";
    
    $startExplode=explode(":",date("H:i:s",$startTime));
    $startTimeToday=$startExplode['0']*3600+$startExplode['1']*60+$startExplode['2'];
    
    $endExplode=explode(":",date("H:i:s",$endTime));    
    $endTimeToday=$endExplode['0']*3600+$endExplode['1']*60+$endExplode['2'];
    
    echo "starttime".$startTime."<br>";
    echo "endtime".$endTime."<br>";
    echo "mor".$mor."<br>";
    echo "eve".$eve."<br>";
    
    if($startTimeToday<$mor){
        if($endTimeToday<$mor){
            //==1a.===When checked/endtime is before morning===========
            if($endTimeToday<$startTimeToday){
                $invalidTime=$invalidTime+($mor-$startTimeToday)+(6*3600)+$endTimeToday;
            }
            else if($endTimeToday>$startTimeToday){
                $invalidTime=$invalidTime+($endTimeToday-$startTimeToday);
            }           
        }
        else if(($endTimeToday>$mor)&&($endTimeToday<$eve)){
            //==2a.===When checked/endtime is beetween working hours===
            $invalidTime=$invalidTime+($mor-$startTimeToday);
        }
        else if($endTimeToday>$eve){
            //==3a.===When checked/endtime is after evening============
            $invalidTime=$invalidTime+($mor-$startTimeToday)+($endTimeToday-$eve);
        }
    }
    else if(($startTimeToday>$mor)&&($startTimeToday<$eve)){
        if($endTimeToday<$mor){
            //==1b.===When checked/endtime is before morning===========
            echo $invalidTime=$invalidTime+(6*3600)+$endTimeToday;
        }
        else if(($endTimeToday>$mor)&&($endTimeToday<$eve)){
            //==2b.===When checked/endtime is beetween working hours===
            if($endTimeToday<$startTimeToday){
                $invalidTime=$invalidTime+((15*3600)+1800);
            }
            else if($endTimeToday>$startTimeToday){
                $invalidTime=$invalidTime;
            }           
        }
        else if($endTimeToday>$eve){
            //==3b.===When checked/endtime is after evening============
            $invalidTime=$invalidTime+($endTimeToday-$eve);
        }
    }
    else if ($startTimeToday>$eve){
        if($endTimeToday<$mor){
            //==1c.===When checked/endtime is before morning===========
            echo $invalidTime=$invalidTime+((24*3600)-$startTimeToday)+$endTimeToday;
        }
        else if(($endTimeToday>$mor)&&($endTimeToday<$eve)){
            //==2c.===When checked/endtime is beetween working hours===
            $invalidTime=$invalidTime+((24*3600)-$startTimeToday)+((9*3600)+1800);
        }
        else if($endTimeToday>$eve){
            //==3c.===When checked/endtime is after evening============
            if($endTimeToday<$startTimeToday){
                $invalidTime=$invalidTime+((24*3600)-$endTimeToday)+((9*3600)+1800)+($endTimeToday-$eve);
            }
            else if($endTimeToday>=$startTimeToday){
                $invalidTime=$invalidTime+($endTimeToday-$startTimeToday);
            }
        }
    }
    $validTime=$totSecs-$invalidTime;
    
    echo "<br><br>Total Time Taken is ".$totSecs."<br>";
    echo "InValid seconds are ".$invalidTime."<br><br>";
    echo "Valid seconds are ".$validTime.", or<br>";
    echo "Valid minutes are ".($validTime/60).", or<br>";
    echo "Valid hours are ".($validTime/3600)."<br>";
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!