2015-07-20 143 views
0

嗨我有一個24小時時間格式的兩個變量,並且要計算工作小時數。但我得到計算在2 24小時時間格式中工作的小時數PHP

我使用PHP,這裏是我的代碼

$endtime = date('g:i A', strtotime($itInfo['endTime'])); 
$startTime = date('g:i A', strtotime($itInfo['startTime'])); 
$timeDiff = (strtotime($endtime) - strtotime($startTime))/60/60; 
$total  = strtotime($endtime) - strtotime($startTime); 
$hours  = floor($total/60/60); 
$minutes = round(($total - ($hours * 60 * 60))/60); 

echo "FROM ".$itInfo['startTime']." TO ".$itInfo['endTime']." (".$hours.'.'.$minutes."hours)";` 

下面是從22:00輸出到03:00(-19.0hours),這是錯誤的輸出應該是消極和錯誤值5個小時。

+0

你有這種格式YYYY-MM-DD HH時間:MM:SS? –

+0

[計算PHP中2個日期之間的小時數]可能的重複(http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php) – Hytool

+0

No. '把它保存爲這種格式的varchar HH:MM在24小時內 –

回答

0

試試這個:

$timeDiff = strtotime($itInfo['endTime']) - strtotime($itInfo['startTime']); 

echo substr('00'.($timeDiff/3600 % 24),-2) 
    .':'. substr('00'.($timeDiff/60 % 60),-2) 
    .':'. substr('00'.($timeDiff % 60),-2); 
+0

這個完美的工作!謝謝 –

0

正如其他人所指出的,最好使用時間戳工作。但隨着當前的代碼,你應該能夠echo前添加以下權利:

if ($itInfo['startTime'] > $itInfo['endTime']) { 
    $hours = 24 - $hours; 
} 

這將是:24 - 19 = 5

此外,一定要採取在$total變量添加abs()還有:

$total = abs(strtotime($endtime) - strtotime($startTime));

+0

不要使用'abs()',因爲這將掩蓋錯誤輸入值的潛在錯誤... –

+0

有趣的一點,謝謝!你能舉一個例子嗎? – camelCase

+0

如果計算出來的差值出現負值(這種情況一定不會發生),那麼abs()會使其正確...並且您可能很難計算出錯誤。 –

相關問題