$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
如何将上述转换$interval
,以秒在PHP
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
如何将上述转换$interval
,以秒在PHP
还有一个功能, format
为这个。 但它不会返回的秒数。 要获取的秒数使用此方法
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
如果你真的想使用$interval
,你需要计算。
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
这里
86400
是秒在一天的数目 3600
是秒在一个小时的数量 60
是秒在一分钟内的数目 获得在间隔秒数另一种方法是将其添加到零为止,并获得该日期的时间戳:
$seconds = date_create('@0')->add($interval)->getTimestamp();
这种方法将处理通过DateInterval构造器创建或多或少正确的时间间隔,而shiplu的回答会忽略年,月,日这样的区间。 然而,shiplu的回答是通过减去两个日期中创建的间隔更准确。 对于仅由小时,分钟和秒的间隔,这两种方法都会得到正确的答案。
我只想补充到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');
它不处理好几个月。