Разница между двумя датами

Существует несколько способов вычисления разницы между двумя датами с помощью 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.

Была ли эта страница полезной?