2012-02-12 25 views
0

我目前有一個G:I格式的時間差異列表。添加G:i格式的小時php

我想將它們全部加起來,但是當我嘗試將它重置爲24時返回0. 我怎樣才能得到如下結果:例如54:45?

在此先感謝。

date_default_timezone_set('UTC'); 
$username = $row['username']; 
$begintime = $row['begintime']; 
$endtime = $row['endtime']; 

$begintime = new DateTime($begintime); 
$begintime = $begintime->format('H:i'); 

$endtime = new DateTime($endtime); 
$endtime = $endtime->format('H:i'); 

$difference = strtotime($endtime) - strtotime($begintime); 
$difference = date('G:i', $total); 
$total_hours += $difference; 
+0

顯示你的代碼。我們可以猜測發生了什麼,但是它會在沒有看到代碼的情況下在黑暗中拍攝。 – JJJ 2012-02-12 13:45:46

+0

添加了我的代碼@Juhana。 – Sino 2012-02-12 13:48:42

回答

1

不要使用date()格式化的絕對時間。由於$difference包含秒的時間差,這只是一個簡單的算術的事情:

$hours = floor($difference/60/60); 
$minutes = ($difference/60) % 60; 

echo "$hours:$minutes"; 
+0

這更接近我的答案,但如果我有2點半的時間2點會怎樣。這不會給我5:00 .. – Sino 2012-02-12 14:01:35

+0

爲什麼不呢?如果你仍然在做'$ total_hours + = $差異'..停止這樣做。你應該*先*累加時間,然後*格式。 – JJJ 2012-02-12 14:04:46

+0

我已經通過將分鐘除以60來解決問題,然後將其添加到小時,並將剩下的分鐘保留爲剩餘分鐘。謝謝@Juhana – Sino 2012-02-12 14:11:24

0

實際上,你可以「欺騙」 DateTime到通過添加不同到任意日期做絕對時間:

$foo = new DateTime(); 
$bar = new DateTime(); 

foreach ($intervals as $interval) { 
    $begin = $interval['begin']; 
    $end = $interval['end']; 
    $foo->add($begin->diff($end)); 
} 

// Will be the total time of all intervals, as an interval itself 
$total = $foo->diff($bar);