如何计算使用PHP的两个日期之间的差异?
我有两种形式的日期:
Start Date: 2007-03-24
End Date: 2009-06-26
现在我需要通过以下形式找出这两者之间的区别:
2 years, 3 months and 2 days
我怎样才能在PHP中做到这一点?
最好的做法是使用PHP的DateTime
(和DateInterval
)对象。 每个日期都封装在一个DateTime
对象中,然后可以做出两者的区别:
$first_date = new DateTime("2012-11-30 17:03:30");
$second_date = new DateTime("2012-12-21 00:00:00");
DateTime
对象将接受任何格式strtotime()
会。 如果需要更具体的日期格式,可以使用DateTime::createFromFormat()
创建DateTime
对象。
在两个对象被实例化之后,您使用DateTime::diff()
减去另一个对象。
$difference = $first_date->diff($second_date);
$difference
现在包含具有差异信息的DateInterval
对象。 var_dump()
看起来像这样:
object(DateInterval)
public 'y' => int 0
public 'm' => int 0
public 'd' => int 20
public 'h' => int 6
public 'i' => int 56
public 's' => int 30
public 'invert' => int 0
public 'days' => int 20
要格式化DateInterval
对象,我们需要检查每个值并将其排除,如果它为0:
/**
* Format an interval to show all existing components.
* If the interval doesn't have a time component (years, months, etc)
* That component won't be displayed.
*
* @param DateInterval $interval The interval
*
* @return string Formatted interval string.
*/
function format_interval(DateInterval $interval) {
$result = "";
if ($interval->y) { $result .= $interval->format("%y years "); }
if ($interval->m) { $result .= $interval->format("%m months "); }
if ($interval->d) { $result .= $interval->format("%d days "); }
if ($interval->h) { $result .= $interval->format("%h hours "); }
if ($interval->i) { $result .= $interval->format("%i minutes "); }
if ($interval->s) { $result .= $interval->format("%s seconds "); }
return $result;
}
现在剩下的就是在$difference
DateInterval
对象上调用我们的函数:
echo format_interval($difference);
我们得到正确的结果:
20天6小时56分30秒
用于实现目标的完整代码:
/**
* Format an interval to show all existing components.
* If the interval doesn't have a time component (years, months, etc)
* That component won't be displayed.
*
* @param DateInterval $interval The interval
*
* @return string Formatted interval string.
*/
function format_interval(DateInterval $interval) {
$result = "";
if ($interval->y) { $result .= $interval->format("%y years "); }
if ($interval->m) { $result .= $interval->format("%m months "); }
if ($interval->d) { $result .= $interval->format("%d days "); }
if ($interval->h) { $result .= $interval->format("%h hours "); }
if ($interval->i) { $result .= $interval->format("%i minutes "); }
if ($interval->s) { $result .= $interval->format("%s seconds "); }
return $result;
}
$first_date = new DateTime("2012-11-30 17:03:30");
$second_date = new DateTime("2012-12-21 00:00:00");
$difference = $first_date->diff($second_date);
echo format_interval($difference);
链接地址: http://www.djcxy.com/p/9837.html
上一篇: How to calculate the difference between two dates using PHP?