使用PHP获取两个特定小时数之间的差异

时间:2016-03-09 08:31:44

标签: php date time

我想获得特定小时数之间的差异,因为我正在处理工资单项目,这需要获得员工的总工作时间。

让我们说员工已经工作了40:18:20(hh:mm:ss) 他错过了12:15:10工作(hh:mm:ss)

我希望得到以下两点之间的区别: (40:18:20) - (12:15:10)=(28:03:10)

可以通过PHP函数吗?

我实际上做的是将其拆分为字符串,然后尝试单独减去每个数字,然后再次重新收集它们,这就像我认为的那样#34;不专业。

请告知。

4 个答案:

答案 0 :(得分:1)

你可以使用这个功能

function getTimeDiff($dtime,$atime){
$nextDay=$dtime>$atime?1:0;
$dep=explode(':',$dtime);
$arr=explode(':',$atime);


$diff=abs(mktime($dep[0],$dep[1],0,date('n'),date('j'),date('y'))-mktime($arr[0],$arr[1],0,date('n'),date('j')+$nextDay,date('y')));

//Hour

$hours=floor($diff/(60*60));

//Minute 

$mins=floor(($diff-($hours*60*60))/(60));

//Second

$secs=floor(($diff-(($hours*60*60)+($mins*60))));

if(strlen($hours)<2)
{
    $hours="0".$hours;
}

if(strlen($mins)<2)
{
    $mins="0".$mins;
}

if(strlen($secs)<2)
{
    $secs="0".$secs;
}

return $hours.':'.$mins.':'.$secs;

}

答案 1 :(得分:0)

这将处理超过24小时的差异。 代码可能有点过分,但另一方面它很容易理解。

// Use any valid date in both cases
$a = new DateTime(date("Y-m-d H:i:s", mktime(5, 20, 15, 12, 31, 2016)));
$b = new DateTime(date("Y-m-d H:i:s", mktime(65, 10, 5, 12, 31, 2016)));
$c = $a->diff($b);

$days = $c->format("%a");
$hours = intVal($c->format("%H")) + intVal($days);
$minutes = $c->format("%m");
$seconds = $c->format("%s");

// Unformatted result
print $hours . ':' . $minutes . ':' . $seconds;

答案 2 :(得分:0)

这将处理大于24的小时。

    $start = date_create(gmdate('D, d M Y H:i:s',timeTosec('40:18:20')));
    $end = date_create(gmdate('D, d M Y H:i:s',timeTosec('12:15:10')));

    $diff=date_diff($end,$start);
    print_r($diff);
    function timeTosec($time){
        sscanf($time, "%d:%d:%d", $hours, $minutes, $seconds);

        $time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;
        return $time_seconds;
    }

答案 3 :(得分:0)

使用mktime的另一种解决方案:

$ diff返回一个时间戳,然后你需要将其转换为hh:mm:ss

$diff = mktime(40,18,20)-mktime(12,15,10);
$hours = $diff/3600 %3600;
$minutes = $diff/60 %60;
$seconds = $diff % 60;
$time= $hours.":".$minutes.":".$seconds;