Ответ 1
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp()) / 60
Это самый простой способ получить разницу в минутах между двумя экземплярами DateTime
.
Я пытаюсь получить значение 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');
Что не работает. Любая помощь была оценена, чтобы получить желаемый результат.
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp()) / 60
Это самый простой способ получить разницу в минутах между двумя экземплярами DateTime
.
Если вы застряли в позиции, где все, что у вас есть, это DateInterval
, и вы (как я) обнаруживаем, что, как представляется, нет способа получить общие минуты, секунды или что-то среднее между интервалом, решение для создания DateTime в нулевое время, добавьте к нему интервал, а затем получите результирующую метку времени:
$timeInterval = //the DateInterval you have;
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp();
$intervalInMinutes = $intervalInSeconds/60; // and so on
Я написал две функции, которые просто вычисляют 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;
}
Это работает отлично.
function calculateMinutes(DateInterval $int){
$days = $int->format('%a');
return ($days * 24 * 60) + ($int->h * 60) + $int->i;
}
Вот исключенный ответ как метод в стиле 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;
}