转换DateInterval对象在PHP秒(Convert DateInterval object

2019-08-06 11:15发布

$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);

如何将上述转换$interval ,以秒在PHP

Answer 1:

还有一个功能, format为这个。 但它不会返回的秒数。 要获取的秒数使用此方法

$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());

如果你真的想使用$interval ,你需要计算。

$seconds = $interval->days*86400 + $interval->h*3600 
           + $interval->i*60 + $interval->s;

这里

  • 86400是秒在一天的数目
  • 3600是秒在一个小时的数量
  • 60是秒在一分钟内的数目


Answer 2:

获得在间隔秒数另一种方法是将其添加到零为止,并获得该日期的时间戳:

$seconds = date_create('@0')->add($interval)->getTimestamp();

这种方法将处理通过DateInterval构造器创建或多或少正确的时间间隔,而shiplu的回答会忽略年,月,日这样的区间。 然而,shiplu的回答是通过减去两个日期中创建的间隔更准确。 对于仅由小时,分钟和秒的间隔,这两种方法都会得到正确的答案。



Answer 3:

我只想补充到shiplu的回答:

function dateIntervalToSeconds($interval)
{
    $seconds = $interval->days*86400 + $interval->h*3600 
       + $interval->i*60 + $interval->s;
    return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}

为了处理负区间。

需要注意的是-违背Brilliand的答案 -上面的代码将正确地考虑年份,月份和日期。 由于interval- $>天是一个绝对值($ interval-> d是相对于月)。

编辑:此功能仍然不正确的 ,因为通过@Brilliand指出。 反例是

new DateInterval('P4M3DT2H'); 

它不处理好几个月。



文章来源: Convert DateInterval object to seconds in php