计算PHP DateInterval中的总秒数

计算两个date之间的总秒数的最佳方法是什么? 到目前为止,我已经尝试了以下几点:

$delta = $date->diff(new DateTime('now')); $seconds = $delta->days * 60 * 60 * 24; 

但是,DateInterval对象的days属性似乎在当前的PHP5.3构build中被打破(至less在Windows上,它总是返回相同的6015值)。 我也试图用一种不能保存每个月的天数(多达30次),闰年等的方式来做这件事:

 $seconds = ($delta->s) + ($delta->i * 60) + ($delta->h * 60 * 60) + ($delta->d * 60 * 60 * 24) + ($delta->m * 60 * 60 * 24 * 30) + ($delta->y * 60 * 60 * 24 * 365); 

但是我真的不满意使用这个半解决scheme。

难道你不能比较时间戳吗?

 $now = new DateTime('now'); $diff = $date->getTimestamp() - $now->getTimestamp() 

此函数允许您从DateInterval对象中获取总持续时间(秒)

 /** * @param DateInterval $dateInterval * @return int seconds */ function dateIntervalToSeconds($dateInterval) { $reference = new DateTimeImmutable; $endTime = $reference->add($dateInterval); return $endTime->getTimestamp() - $reference->getTimestamp(); } 

你可以这样做:

 $currentTime = time(); $timeInPast = strtotime("2009-01-01 00:00:00"); $differenceInSeconds = $currentTime - $timeInPast; 

time()返回从历元时间(1970-01-01T00:00:00)开始的当前时间(以秒为单位),而strtotime的作用相同,但是基于特定的date/时间。

 static function getIntervalUnits($interval, $unit) { // Day $total = $interval->format('%a'); if ($unit == TimeZoneCalc::Days) return $total; //hour $total = ($total * 24) + ($interval->h ); if ($unit == TimeZoneCalc::Hours) return $total; //min $total = ($total * 60) + ($interval->i ); if ($unit == TimeZoneCalc::Minutes) return $total; //sec $total = ($total * 60) + ($interval->s ); if ($unit == TimeZoneCalc::Seconds) return $total; return false; } 

你可以把硬编码(而不是60 * 60 – 放在3600),所以它不需要每次计算它们。

编辑 – 修复基于您的评论的数字。