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

我如何$interval在php中将以上内容转换为秒

4

3 回答 3

42

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

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

此方法将或多或少正确地处理通过 DateInterval 构造函数创建的间隔,而Shiplu 的答案将忽略此类间隔的年、月和日。但是,shiplu 的答案对于通过减去两个日期创建的间隔更准确。对于仅包含小时、分钟和秒的时间间隔,两种方法都会得到正确的答案。

于 2014-03-17T21:06:56.833 回答
29

有一个功能format。但它不会返回秒数。要获得秒数,您可以使用此技术

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

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

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

这里

  • 86400是一天中的秒数
  • 3600是一小时的秒数
  • 60是一分钟的秒数
于 2013-01-11T11:52:03.200 回答
1

我只会添加到shiplu的答案:

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

处理负间隔。

请注意 - 与Billiand 的回答相反- 上面的代码将正确考虑年份、月份和日期。因为 $interval->days 是一个绝对值($interval->d 是相对于月份而言的)。

编辑:正如@Brilliand 所指出的,这个函数仍然不正确。一个反例是

new DateInterval('P4M3DT2H'); 

它不能很好地处理几个月。

于 2017-02-09T15:42:59.020 回答