$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
我该如何在PHP中将上述$interval
转换为秒
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
我该如何在PHP中将上述$interval
转换为秒
获取时间间隔中的秒数的另一种方法是将其添加到零日期,并获取该日期的时间戳:
$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
是一分钟的秒数$interval->days
可能 是一个布尔值。替代 $interval->days
,使用 $interval->y
、$interval->m
和 $interval->d
会更安全。你将面临的直接问题是决定在一个月中使用多少天。@Brilliand 的答案解决了这个问题,但也有其自身的限制。要明智地选择。 - Joel Mellon我只会添加到shiplu的答案:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
new DateInterval('P4M3DT2H');
它对月份的处理不好。
new DateInterval('P4M3DT2H')
。试一下,你会发现 days
变量是空的,尽管这个时间间隔大约跨越了 123 天。 - Brilliandnew DateInterval('P3D')
- days
变量仍为空。使用new
创建的DateInterval永远不会填充该变量。这就是我所说的“DateInterval构造函数”。 - Brilliand