我想用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'));
}
我想用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'));
}
的問題是,只有返回()的小時部分,你將刪除大於 一整天的任何東西,所以它只會在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之間,那應該沒問題。
感謝您的回答。我會幫你的。 –
我認爲這個代碼有幫助
foreach ($timeArr $key=> $timevalue) {
$timesumArr[$key]=date('H:i:s', array_sum(array_map('strtotime', $timevalue)));
}
你必須從分鐘和秒爲整數separatly總結小時,然後一切都轉換爲小時。 – Vladislav
謝謝Valadislav –
如果它是有用的,聽起來像一個答案,我會張貼它作爲答案。 ) – Vladislav