得到PHP的DateInterval总'分钟'

时间:2013-05-27 15:14:40

标签: php datetime

我试图在“总分钟”值中获取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');

哪个不行。任何帮助,以获得我想要的输出。

5 个答案:

答案 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;
}