2013-08-07 21 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);  

输出将是一个人类可读的字符串,就像你在找什么。