Подтвердить что ты не робот

Получить php DateInterval в общей сложности 'minutes'

Я пытаюсь получить значение PHP "DateInterval" в значении "total minutes". Как его получить? Кажется, что простой формат ( "% я минут" ) не работает?

Вот пример кода:

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

Теперь, если я попытаюсь получить интервал за полные дни, его штраф:

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

Он показывает 2 дня в качестве вывода, что совершенно нормально. То, что я пытаюсь получить, если получить значение в "общих минутах", поэтому я попытался:

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

Что не работает. Любая помощь была оценена, чтобы получить желаемый результат.

4b9b3361

Ответ 1

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

Это самый простой способ получить разницу в минутах между двумя экземплярами DateTime.

Ответ 2

Если вы застряли в позиции, где все, что у вас есть, это DateInterval, и вы (как я) обнаруживаем, что, как представляется, нет способа получить общие минуты, секунды или что-то среднее между интервалом, решение для создания DateTime в нулевое время, добавьте к нему интервал, а затем получите результирующую метку времени:

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

Ответ 3

Я написал две функции, которые просто вычисляют totalTime из 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;
}

Ответ 4

Это работает отлично.

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

Ответ 5

Вот исключенный ответ как метод в стиле 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;
}