2017-08-03 48 views
1

我想用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

回答

1

的問題是,只有返回()的小時部分,你將刪除大於 一整天的任何東西,所以它只會在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

感謝您的回答。我會幫你的。 –

0

我認爲這個代碼有幫助

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

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

     }