我试图在“总分钟”值中获取PHP“DateInterval”值。怎么弄?好像简单的格式(“%i分钟”)不起作用?
以下是示例代码:
$test = new \DateTime("48 hours");
$interval = $test->diff(new \DateTime());
现在,如果我试着获得总天数的间隔,那就好了:
echo $interval->format('%a total days');
输出显示2天,完全没问题。如果要获得“总分钟”中的值,我想要得到的是,所以我尝试了:
echo $interval->format('%i total minutes');
哪个不行。任何帮助,以获得我想要的输出。
答案 0 :(得分:60)
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp()) / 60
这是在两个DateTime
个实例之间获得分钟差异的最简单方法。
答案 1 :(得分:16)
如果你被困在一个只有DateInterval
的位置,而你(像我一样)发现似乎没有办法获得总分,秒或其他任何间隔,解决方案是在零时创建一个DateTime,为它添加间隔,然后得到结果时间戳:
$timeInterval = //the DateInterval you have;
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp();
$intervalInMinutes = $intervalInSeconds/60; // and so on
答案 2 :(得分:11)
我编写了两个函数,它们只是从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;
}
答案 3 :(得分:2)
完美无缺。
ImportError: No module named 'config'
答案 4 :(得分:0)
以下是PHP7.2样式中作为方法的例外答案:
/**
* @param \DateTime $a
* @param \DateTime $b
* @return int
*/
public static function getMinutesDifference(\DateTime $a, \DateTime $b): int
{
return abs($a->getTimestamp() - $b->getTimestamp()) / 60;
}