获取php DateInterval的总时间'分钟'

fv2wmkja  于 2023-01-19  发布在  PHP
关注(0)|答案(6)|浏览(125)

我正在尝试获取PHP的“总分钟数”中的“日期间隔”值。如何获取它?似乎简单的格式(“%i分钟”)不工作?
下面是示例代码:

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

现在,如果我尝试获得总天数的间隔,它是正确的:

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

它显示2天作为输出,这是完全好的。我试图得到的如果要得到的值在“总分钟”,所以我尝试:

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

这是行不通的。任何帮助感谢得到我想要的输出。

tzxcd3kk

tzxcd3kk1#

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

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

dtcbnfnu

dtcbnfnu2#

如果您陷入了一个只有DateInterval的困境,并且您(像我一样)发现似乎没有办法获得时间间隔的总分钟数、总秒数或其他值,那么解决方案是在零时间创建一个DateTime,将时间间隔添加到其中,然后获得结果时间戳:

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

0s7z1bwu3#

我编写了两个函数,它们只是从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;
}
7cjasjjr

7cjasjjr4#

以下是作为PHP7.2风格的方法的例外答案:

public static function getMinutesDifference(\DateTime $a, \DateTime $b): int
{
    return abs($a->getTimestamp() - $b->getTimestamp()) / 60;
}
but5z9lq

but5z9lq5#

那很好用。

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

xvw2m8pv6#

这个问题是关于分钟的,但是如果你想重新计算每个结转点(就像我需要做的那样),你可以使用@glavic在www.example.com手册页的注解中建议的解决方案php.net(简化后变成了一个函数):

private function calculateCarryOverPoints(\DateInterval $dateInterval): \DateInterval
{
    $from = new \DateTime;
    $to = clone $from;
    // Add time of dateInterval to empty DateTime object
    $to = $to->add($dateInterval);
    // Calculate difference between zero DateTime and DateTime with added DateInterval time
    // Which returns a DateInterval object $diff with correct carry over points (days, hours, minutes, seconds etc.)
    return $from->diff($to);
}

相关问题