我想获得特定小时数之间的差异,因为我正在处理工资单项目,这需要获得员工的总工作时间。
让我们说员工已经工作了40:18:20(hh:mm:ss) 他错过了12:15:10工作(hh:mm:ss)
我希望得到以下两点之间的区别: (40:18:20) - (12:15:10)=(28:03:10)
可以通过PHP函数吗?
我实际上做的是将其拆分为字符串,然后尝试单独减去每个数字,然后再次重新收集它们,这就像我认为的那样#34;不专业。
请告知。
答案 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;