php. Datetime разница между датами в секундах и минутах


Вычисляем разницу между датами в формате DateTime в секундах и минутах.

Условие:
Есть 2 даты в виде DateTime объекта.
Нужно найти разницу между датами только в секундах или в минутах.
Решение:
За первую дату я возьму текущую дату.
$a = new DateTime('now');

Второй датой я возьму текущую дату + 15 минут (это только пример), даты и время могут быть любые.
$b = (new \DateTime('now'))->add(new \DateInterval("PT15M")); // К текущей дате и времени прибавляю 15 минут

Разницу в датах и времени можно получить элементарно с помощью метода diff.
$a->diff($b);

И получим мы следующее:
object(DateInterval)#174 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(15)
["s"]=>
int(0)
["f"]=>
float(3.0E-6)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
int(0)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}

Разницу в минутах получена, но если минут будет 90, то результат будет таким:
object(DateInterval)#174 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(1)
["i"]=>
int(30)
["s"]=>
int(0)
["f"]=>
float(3.0E-6)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
int(0)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}

Мы получили не наши 90 ожидаемых минут, а 1 час и 30 минут.
Для того, чтобы получить разницу в минутах можно сделать следующее:
Переводим наши даты в формат Timestamp и от одной даты отнимаем другую.
$secondDifference = ($b->getTimestamp() - $a->getTimestamp()); // Разница между датами в секундах

Таким образом мы получили разницу между датами в секундах.
Результат полученной разницы в секундах (15 минут = 900 секунд):
int(900)

Теперь получим разницу в минутах:
$minuteDiference = ($secondDifference / 60) % 60; // В одной минуте 60 секунд + округляем число до целого

Таким образом мы получили нашу разницу в 15 минут.
int(15)


Итоговый код:
$a = new \DateTime('now');
$b = (new \DateTime('now'))->add(new \DateInterval("PT15M"));
$secondDifference = ($b->getTimestamp() - $a->getTimestamp()); // Разница между датами в секундах
$minuteDiference = ($secondDifference / 60 % 60);
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.