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


Get difference between two specific number of hours using PHP

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

假设员工工作了 40:18:20 (HH:MM:SS)他错过了12:15:10的工作(hh:mm:ss)

我想得到这两个时间之间的区别如下:(40:18:20) - (12:15:10) = (28:03:10)

可以通过PHP函数吗?

我实际上所做的是将其拆分为字符串,并尝试单独减去每个数字,然后再次回忆它们,这是"我认为"不专业的。

请指教。

您可以使用此函数

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;

}

这将处理大于 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;
    }

这将处理大于 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;

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;