2014-03-13 66 views
0

經過幾次嘗試後我沒有得到正確的結果。情況是這樣的:用PHP中的時間值聚合兩個字符串

$morning = '01:05:12'; 
$evening = '14:05:29'; 

$sum = gmdate('H:i:s', strtotime($morning) + strtotime($evening)); 
echo $sum; 

它沒有工作,總結變量輸出06:42:25,如果當然不正確。我應該如何解決這個問題?

謝謝

+1

什麼是正確的值? – Dexa

+0

在這種情況下,正確的值將是「15:10:41」。所以我需要以相同的時間格式彙總兩次。 –

+2

PHP的* date *函數不會幫助你,因爲你沒有處理*日期*,你正在處理持續時間。將字符串拆分爲第二,分鐘和小時部分並手動求和。 – deceze

回答

1
function strToDuration($str) { 
    sscanf($str, '%d:%d:%d', $hours, $minutes, $seconds); 
    return $seconds + ($minutes * 60) + ($hours * 60 * 60); 
} 

function durationToStr($duration) { 
    $hours = floor($duration/(60 * 60)); 
    $seconds = $duration % (60 * 60); 
    $minutes = floor($seconds/60); 
    $seconds %= 60; 
    return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds); 
} 

$morning = '01:05:12'; 
$evening = '14:05:29'; 

echo durationToStr(strToDuration($morning) + strToDuration($evening)); 
+0

確實,很棒!謝謝。 –

0

什麼是你的時區設置(date_default_timezone_get())?生成時間戳時,strtotime()假定當前時區(如果沒有指定),而gmdate()則輸出UTC時間。

更新:另請參見有關持續時間的評論 - 來自strtotime的時間戳將會擴展爲「當前日期%的01:05:12」,因此它們的總和不會僅僅是「當前日期的新時間% 」。

0

首先從時間減去strtotime("00:00:00")。然後將它們添加並格式化。

$morning = '01:05:12'; 
$evening = '14:05:29'; 

$sum = gmdate('H:i:s', (strtotime("01:05:12")-strtotime("00:00:00"))+(strtotime("14:05:29")-strtotime("00:00:00"))); 
echo $sum; 
+0

如果總時間超過24小時,則不起作用。 http://3v4l.org/fA8M1 Ooops。 – deceze

+0

它從第二天開始返回。我認爲它應該是這樣的。 – Menixator

0

的總結時間簡單的例子:

$morning = '01:05:12'; 
$evening = '14:05:29'; 

$morning = strtotime("1970-01-01 $morning UTC"); # convert time to seconds 
$evening = strtotime("1970-01-01 $evening UTC"); # same as above 
$seconds = $morning + $evening;     # sum seconds 
$hours = floor($seconds/3600); $seconds %= 3600; # calculate number of hours 
$minutes = floor($seconds/60); $seconds %= 60; # calculate number of minutes 

echo sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds); # 15:10:41 

demo

0

您可以使用PHP的DateInterval功能!

function getTotalTime($times) 
{ 
    $h = $m = $s = 0; 
    foreach ($times as $time) { 
     $time = new \DateTime($time); 
     $h += $time->format('H'); 
     $m += $time->format('i'); 
     $s += $time->format('s'); 
    } 
    $interval = new DateInterval("PT{$h}H{$m}M{$s}S"); 
    return $interval->format('%H:%I:%S');   
} 

$morning = '01:05:12'; 
$evening = '14:05:29'; 
echo getTotalTime([$morning, $evening]);