php的总小时数

问题描述:

我想用MySQL 00:00:00的格式来总结小时数,我用foreach对他们进行求和,但是当总和到达24:00:00时它就从00:00:00开始和我想的和要遵循的24:10:00,25:00:00,等php的总小时数

这是我的代码来概括他们:

foreach($hours as $h){ 
$sumaHoras = date('H:i:s', strtotime($sumaHoras) + strtotime($h->horas) - strtotime('00:00')); 
} 
+0

你必须从分钟和秒为整数separatly总结小时,然后一切都转换为小时。 – Vladislav

+0

谢谢Valadislav –

+0

如果它是有用的,听起来像一个答案,我会张贴它作为答案。 ) – Vladislav

的问题是,只有返回()的小时部分,你将删除大于 一整天的任何东西,所以它只会在00:00到23:59之间返回一些东西。您应该使用date()以外的其他东西,并且仅在所有秒数加起来时才使用。

因此,你应该尝试这样的事:

function sec2hours($seconds){ 
    $units = array(
    'hours' => 3600, 
    'minutes' => 60, 
    'seconds' => 1, 
); 
    foreach($units as &$unit){ 
    $quot = intval($seconds/$unit); 
    $seconds -= $quot * $unit; 
    $unit = $quot; 
    } 
    $str = array(); 
    foreach($units as $name => $value){ 
    $str[] = ($value === 0?'00':$value); 
    } 
    return implode(':',$str); 
} 

$sum = 0; 
foreach($hours as $h){ 
$sum += strtotime($h->horas) - strtotime('00:00'); 
} 
$sumaHoras = sec2hours($sum); 

的第二个问题是的strtotime()上应结转到天像25:00小时返回false, 所以如果你只有一个像这样的输入,它会变成0 - strtotime('00:00'),最后你会得到一个巨大的负数。 但是,如果所有的输入都在00-23:00-59之间,那应该没问题。

+0

感谢您的回答。我会帮你的。 –

我认为这个代码有帮助

 foreach ($timeArr $key=> $timevalue) { 

      $timesumArr[$key]=date('H:i:s', array_sum(array_map('strtotime', $timevalue))); 

     }