2013-08-07 65 views
0

我需要在PHP中比較過去/未來日期與當前日期,並在「4小時直到」,或「2天3小時直到」或「5小時前」格式。可選擇在「-4h」(這是壞的)或「4h」(這是好的)格式。在PHP中返回兩個日期的差異

因此,在一個例子:

x = $expiry_date - $todays_date 

如果結果是積極的,如。 $ expiry_date將來是4小時,x =「要走4小時」或「4小時」。如果結果爲負數,例如「4小時前」或「-4小時」。

任何其他類似的探測結果格式都很好。

請幫忙嗎?

+0

如果你得到時間戳的差異,那麼它只是在一個小時,一天等簡單的秒數劃分 – MightyPork

+0

你能舉個例子嗎? – TomaszRykala

+0

http://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-eg-1-day-ago-2-days-ago –

回答

3

參考Dates diff in PHP

$date1 = "2013-08-11"; 
$date2 = "2012-07-12"; 

$diff = abs(strtotime($date2) - strtotime($date1)); 

$years = floor($diff/(365*60*60*24)); 
$months = floor(($diff - $years * 365*60*60*24)/(30*60*60*24)); 
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 

printf("%d years, %d months, %d days\n", $years, $months, $days); 

或者

$date1 = new DateTime("2007-03-24"); 
$date2 = new DateTime("2009-06-26"); 
$interval = $date1->diff($date2); 
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 

//or simply 
//echo "difference " . $interval->days . " days "; 
+1

+1用於提示OO方法 –

+0

同樣在這裏,用於顯示兩種方法的+1,尤其是OO。 –

+0

小心使用'$ time + = 24 * 60 * 60'等計算來操縱時間戳。這會產生夏令時和其他時區異常問題。改用'$ time = strtotime('+ 1 day',$ time)'等方法。 – ironcito

0

this question

該變量將包含以秒爲單位的差異,然後您可以根據需要進行劃分以獲得分鐘/小時/天等。除以60得到分鐘數,再次得到60小時數等等。然後進行一些簡單的值檢查以根據需要進行格式化。

1

您可以使用Carbon庫來實現。 它會去是這樣的:

$now = Carbon::now(); 
$then = Carbon::create(2013, 8, 8, 23, 26, 11); 
echo $now->diffForHumans($then);  

輸出將是一個人類可讀的字符串,就像你在找什麼。