2013-05-27 36 views
21

我试图在“总分钟”值中获取PHP“DateInterval”值。如何得到它?看起来像简单的格式(“%i分钟”)不起作用?获取php DateInterval总计'分钟'

下面是示例代码:

$test = new \DateTime("48 hours"); 
$interval = $test->diff(new \DateTime()); 

现在,如果我尝试获得总天数区间,其罚款:

echo $interval->format('%a total days'); 

据显示2天作为输出,这完全是精细。我试图让,如果得到的“总分钟”的价值,所以我尝试:

echo $interval->format('%i total minutes'); 

这是行不通的。任何帮助感激,以获得我想要的输出。

+1

你能展示一些更实际的代码?例如。初始化,使用等 –

+0

我不认为这是可能的一般规则。如果间隔时间是“一个月”呢? –

+0

请发布您的代码 – edwardmp

回答

46
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp())/60 

这让两个DateTime实例之间的分钟差的最简单的方法。

+0

谢谢。我认为这一点也与欺骗的评论。感谢您发布完整的解决方案。 – Rana

+14

是的,这个骗子,他很棒......; o) – deceze

+1

我错过了它是你:D – Rana

8

如果你被困在一个只有DateInterval的位置,并且你(像我)发现似乎没有办法得到总分钟数,秒数或任何间隔,解决方案是在零时间创建一个日期时间,间隔添加到它,然后得到结果时间戳:

$timeInterval  = //the DateInterval you have; 
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp(); 
$intervalInMinutes = $intervalInSeconds/60; // and so on 
4

我写的只是计算从DateInterval的TOTALTIME两种功能。 准确性可以通过考虑年份和月份来增加。

function getTotalMinutes(DateInterval $int){ 
    return ($int->d * 24 * 60) + ($int->h * 60) + $int->i; 
} 

function getTotalHours(DateInterval $int){ 
    return ($int->d * 24) + $int->h + $int->i/60; 
} 
+0

你可以使用'$ int-> days * 24'来计算前几个月或者几年。 – fyrye

2

完美地工作。

function calculateMinutes(DateInterval $int){ 
    $days = $int->format('%a'); 
    return ($days * 24 * 60) + ($int->h * 60) + $int->i; 
}