37

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

这是行不通的。任何帮助都可以得到我想要的输出。

4

5 回答 5

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

DateTime这是获得两个实例之间分钟差异的最简单方法。

于 2013-05-27T15:35:12.050 回答
28

如果你被困在一个你DateInterval只有时间,添加时间间隔,然后得到结果时间戳:

$timeInterval      = //the DateInterval you have;
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp();
$intervalInMinutes = $intervalInSeconds/60; // and so on
于 2014-05-15T10:12:43.180 回答
14

我编写了两个函数,它们仅根据 DateInterval 计算总时间。可以通过考虑年和月来提高准确性。

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;
}
于 2016-02-22T09:58:40.290 回答
2

这完美无缺。

function calculateMinutes(DateInterval $int){
    $days = $int->format('%a');
    return ($days * 24 * 60) + ($int->h * 60) + $int->i;
}
于 2016-11-10T12:13:46.103 回答
2

这是 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;
}
于 2019-06-21T08:26:26.077 回答