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