經過幾次嘗試後我沒有得到正確的結果。情況是這樣的:用PHP中的時間值聚合兩個字符串
$morning = '01:05:12';
$evening = '14:05:29';
$sum = gmdate('H:i:s', strtotime($morning) + strtotime($evening));
echo $sum;
它沒有工作,總結變量輸出06:42:25,如果當然不正確。我應該如何解決這個問題?
謝謝
經過幾次嘗試後我沒有得到正確的結果。情況是這樣的:用PHP中的時間值聚合兩個字符串
$morning = '01:05:12';
$evening = '14:05:29';
$sum = gmdate('H:i:s', strtotime($morning) + strtotime($evening));
echo $sum;
它沒有工作,總結變量輸出06:42:25,如果當然不正確。我應該如何解決這個問題?
謝謝
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));
確實,很棒!謝謝。 –
什麼是你的時區設置(date_default_timezone_get()
)?生成時間戳時,strtotime()假定當前時區(如果沒有指定),而gmdate()則輸出UTC時間。
更新:另請參見有關持續時間的評論 - 來自strtotime的時間戳將會擴展爲「當前日期%的01:05:12」,因此它們的總和不會僅僅是「當前日期的新時間% 」。
首先從時間減去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;
的總結時間簡單的例子:
$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
您可以使用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]);
什麼是正確的值? – Dexa
在這種情況下,正確的值將是「15:10:41」。所以我需要以相同的時間格式彙總兩次。 –
PHP的* date *函數不會幫助你,因爲你沒有處理*日期*,你正在處理持續時間。將字符串拆分爲第二,分鐘和小時部分並手動求和。 – deceze