2014-07-03 70 views
0
$time1 = "14:45"; 
$time2 = "15:55"; 
list($hours, $minutes) = explode(':', $time1); 
$startTimestamp = mktime($hours, $minutes); 

list($hours, $minutes) = explode(':', $time2); 
$endTimestamp = mktime($hours, $minutes); 

$seconds = $endTimestamp - $startTimestamp; 
$minutes = ($seconds/60) % 60; 
$hours = round($seconds/(60 * 60)); 

echo "<b>$hours</b> hours and<b>$minutes</b> minutes</b>"; 

如果變量time1小於變量time2,但是如果time1是「23:35」而time2是「01:40」,它將輸出「 - 22小時和-55分鐘「。PHP兩小時之間的小時數和分鐘

我怎樣才能解決這個所以它仍然會輸出小時和分鐘的兩次之間即使時間1比時間2可變

此代碼下將採取兩次例如「14:45」和「 16:33" ,並計算出它每次之間有多少小時和分鐘,但如果它不工作‘時間1’低於‘時間2’(時間1和時間2變量)

http://codepad.org/QmFdN6RV

+0

使用ABS()函數施加到減法 –

+0

這取決於是否是23點35分一天,01: 40是下一個,如果是同一天。 –

+0

23:35將是一天01:40將是那天的清晨 –

回答

0

您可以使用date_diff

$date1 = new DateTime(); 
$date2 = new DateTime(); 
$date1->setTimestamp($startTimestamp); 
$date2->setTimestamp($endTimestamp); 
$interval = date_diff($date1, $date2); 
//or $interval = $date1->diff($date2) 
echo $interval->format('%h hours and %m minutes'); 
0

你會做這樣的:

$time1 = "23:40"; 
$time2 = "01:40"; 
list($hours, $minutes) = explode(':', $time1); 
$startTimestamp = mktime($hours, $minutes); 

list($hours, $minutes) = explode(':', $time2); 
$endTimestamp = mktime($hours, $minutes); 

$seconds = abs($endTimestamp - $startTimestamp); 
$diff = (24*60*60)-$seconds; 
if ($diff < $seconds) { 
    $seconds = $diff; 
} 

$minutes = ($seconds/60) % 60; 
$hours = round($seconds/(60 * 60)); 

echo "<b>$hours</b> hours and<b>$minutes</b> minutes</b>" 

注意,這將永遠不可能給你個體差異超過12小時大。

例如,06:00和22:00之間的差異將在8小時

1

這是我會怎麼做,用strtotime()

// If dates are not specified, strtotime() will assume both are from today 
$time1 = "23:45"; 
$time2 = "01:24"; 

// Absolute value of time difference in seconds 
$diff = abs(strtotime($time1) - strtotime($time2)); 

// Convert $diff to minutes 
$tmins = $diff/60; 

// Get hours 
$hours = floor($tmins/60); 

// Get minutes 
$mins = $tmins%60; 

See demo

這是假設那$time1$time2是從同一天。如果不是,那麼這將需要指定。

$time1 = "today 23:45"; 
$time2 = "tomorrow 01:24"; 
// or 
$time1 = "2014-7-3 23:45"; 
$time2 = "2014-7-4 01:24"; 
// or some other method of specifying the day. 

See demo 2

+0

這兩次之間的時間應該是1h39m,而不是22h21m –

+0

@HannesBrolinLagerstedt必須有某種方式來澄清時間來自哪一天。查看我的更新。 –

+0

@HannesBrolinLagerstedt時代的秩序總是一樣嗎?即'$ time2'總是大於'$ time1'? –

1

如果秒是負的,二十四小時向其中添加:

$time1 = "23:35"; 
$time2 = "1:40"; 
list($hours, $minutes) = explode(':', $time1); 
$startTimestamp = mktime($hours, $minutes); 

list($hours, $minutes) = explode(':', $time2); 
$endTimestamp = mktime($hours, $minutes); 

$seconds = $endTimestamp - $startTimestamp; 
if($seconds < 0) { 
    $seconds+=60*60*24; 
} 

$minutes = ($seconds/60) % 60; 
$hours = round($seconds/(60 * 60)); 

echo "<b>$hours</b> hours and<b>$minutes</b> minutes</b>"; 
0

所以不知道你真正想要的結果 - 可能是兩個方面的,所以我既;)

你也可以使用地板而不是圓的。

首先解決辦法是,你得到的差異基礎上同一天:

<?php 
$time1 = "23:45"; 
$time2 = "01:44"; 
list($hours, $minutes) = explode(':', $time1); 
$firstTimestamp = mktime($hours, $minutes); 

list($hours, $minutes) = explode(':', $time2); 
$secondTimestamp = mktime($hours, $minutes); 

$firstTimestamp > $secondTimestamp?$seconds = $firstTimestamp - $secondTimestamp:$seconds = $secondTimestamp - $firstTimestamp; 

$minutes = ($seconds/60) % 60; 
$hours = floor($seconds/(60 * 60)); 

echo "<b>$hours</b> hours and <b>$minutes</b> minutes</b>"; 
?> 

輸出爲:小時和分鐘

第二種方式是,將結束時間(命名爲第二次)是第二天 比它應該像

<?php 
$time1 = "23:45"; 
$time2 = "01:24"; 
list($hours, $minutes) = explode(':', $time1); 
$firstTimestamp = mktime($hours, $minutes); 

list($hours, $minutes) = explode(':', $time2); 
$secondTimestamp = mktime($hours, $minutes); 

$seconds = $secondTimestamp - $firstTimestamp; 

$seconds<0?$seconds+=24*60*60:""; 

$minutes = ($seconds/60) % 60; 
$hours = floor($seconds/(60 * 60)); 


echo "<b>$hours</b> hours and <b>$minutes</b> minutes</b>"; 
?> 

輸出將是:小時和分鐘

鏈接直接鍵盤:http://codepad.org/7plRAhZJ

相關問題