$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
如何转换上述$interval
到秒在PHP转换DateInterval反对秒在PHP
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
如何转换上述$interval
到秒在PHP转换DateInterval反对秒在PHP
有一个功能format
这一点。但它不会返回秒数。要获取的秒数如果你真的想使用$interval
你需要计算它,你使用这种技术
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
。
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
这里
86400
是秒在一天3600
数目是秒一小时60
数量是在一分钟内的秒数另一种获得间隔i秒数的方法s到它添加到零为止,并获得该日期的时间戳:
$seconds = date_create('@0')->add($interval)->getTimestamp();
此方法将处理通过DateInterval构造器创建或多或少正确的时间间隔,而shiplu's answer会忽略这样的年,月,日间隔。但是,对于通过减去两个日期创建的间隔,shiplu的答案更准确。对于只包含小时,分钟和秒的间隔,两种方法都会得到正确的答案。
我只会增加shiplu's answer:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
要处理负区间。
请注意,与Brilliand's answer相反 - 上面的代码将考虑正确的年份,月份和日期。因为$ interval-> days是一个绝对值($ interval-> d是相对于月份)。
编辑:此功能仍不改正,由@Brilliand指出。一个反例是
new DateInterval('P4M3DT2H');
它处理不好。
它正在返回'0秒' – sanchitkhanna26
@MarkBaker是的,这就是为什么我改变了我的答案 –
太棒了!我得到了这个工作。谢谢@shiplu – sanchitkhanna26