Существует несколько способов вычисления разницы между двумя датами с помощью PHP. В этой статье я покажу, как вычислять разницу дат при использовании PHP версий младше 5.3 и более надежный метод для PHP версий старше 5.3.
Использование функции strtotime() для вычисления разницы между двумя датами для PHP версии ниже 5.3
Функция strtotime() преобразует две даты в UNIX-время и вычисляет по ним количество секунд. Исходя из этого, легче вычислять различные методы, использующие секунды. Функция принимает строковый параметр на английском языке, который показывает описание даты-времени.
Пример
$firstDate = "2019-01-01";
$secondDate = "2020-03-04";
$dateDifference = abs(strtotime($secondDate) - strtotime($firstDate));
$years = floor($dateDifference / (365 * 60 * 60 * 24));
$months = floor(($dateDifference - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days = floor(($dateDifference - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 *24) / (60 * 60 * 24));
echo $years." year, ".$months." months and ".$days." days";
// выведет: 1 year, 2 months and 3 days
abs()
– возвращает абсолютное значение (модуль) числа.В приведенном выше примере для получения разницы двух дат используется несколько функций, таких как abs()
, floor()
и, главным образом, strtotime()
.
Функция strtotime()
получает значение секунд UNIX для дат и использует abs()
для получения абсолютного значения первой даты.
Функция floor()
используется для округления секунд до ближайшего целого числа.
Чтобы получить год, умножьте 365 дней на 60 минут, 60 секунд и 24 часа, затем разделите на разность.
Чтобы получить месяцы, умножьте 30 дней на 60 минут, 60 секунд и 24 часа и разделите на разность разности дат, умноженной на год и 365 дней, 60 минут, 60 секунд и 24 часа.
Затем, чтобы получить разницу дней, умножьте 60 минут, 60 секунд и 24 часа, затем разделите ее на разницу разницы дат, произведение года, 365 дней, 60 минут, 60 секунд и 24 часа и произведения месяцев, 30 дней, 60 минут и 60 секунд и 24 часа.
Наконец, сложите все это в переменную, чтобы вывести окончательную разницу.
Использование объектов DateTime() и DateInterval() для PHP 5.3 и старше
Этот метод представляет собой объектно-ориентированный стиль для получения разницы между двумя датами, он также является самым простым, так как не требует ручного вычисления дат, и рекомендован, так как относится к самой новой версии PHP.
Пример
$firstDate = new DateTime("2019-01-01");
$secondDate = new DateTime("2020-03-04");
$intvl = $firstDate->diff($secondDate);
echo $intvl->y . " год, " . $intvl->m." месяца и ".$intvl->d." день";
echo "\n";
// Общее количество дней
echo $intvl->days . " дней ";
// вывод: 1 год, 2 месяца и 1 день
// 428 дней
В приведенном примере, в отличие от использования функции strtotime()
и других функций и вычислений, объекты DateTime()
и DateInterval()
упростили задачу.
Сначала объявляем даты с помощью new DateTime()
. Затем получаем целочисленное значение разницы с помощью DateInterval()
объекта diff()
от первой даты и передаем вторую дату в качестве параметра.
И наконец, для получения года используем объект y
. Для получения месяцев используем m
, а для дня – d
.