如何计算使用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?

下一篇: Understanding PHP & (ampersand, bitwise and) operator