Вопрос: Как рассчитать разницу между двумя датами в PHP?

Есть две даты: start_date и end_date. Задача - найти разницу между этими двумя датами.

Примеры:

Ввод: начальная_дата: 2016-06-01 22:45:00 
       end_date: 2018-09-21 10:44:01
Результат: 2 года, 3 месяца, 21 день, 11 часов, 59 минут, 1 секунда.

Ввод: start_date: 2015-05-12 12:37:30 
       end_date: 2018-04-25 12:45:31
Результат: 2 года, 11 месяцев, 19 дней, 0 часов, 8 минут, 1 секунда.

Метод 1. Используйте функцию date_diff(), чтобы найти разницу между двумя датами.

Метод 2: Использовать математическую формулу даты и времени, чтобы найти разницу между двумя датами. Он возвращает годы, месяцы, дни, часы, минуты, секунды между двумя указанными датами.

Программа:

<?php
  
// Определим две даты
$date1 = strtotime("2016-06-01 22:45:00"); 
$date2 = strtotime("2018-09-21 10:44:01"); 
  
// Получим разницу между двумя датами
$diff = abs($date2 - $date1); 
  
  
// Чтобы получить год, разделим полученную дату на
// количество секунд в году (365*60 *60*24)
$years = floor($diff / (365*60*60*24)); 
  

// Чтобы получить месяц, вычтим его с годами и
// делим полученную дату на
// общее количество секунд в месяце (30*60*60*24)
$months = floor(($diff - $years * 365*60*60*24)
                               / (30*60*60*24)); 
  
  
// Чтобы получить день, вычтем его с годами и
// месяцами и разделим полученную дату на
// количество секунд в днях (60*60*24)
$days = floor(($diff - $years * 365*60*60*24 - 
             $months*30*60*60*24)/ (60*60*24));
  
  
// Чтобы получить час, вычтем его с годами,
// месяцами и секундами и разделим полученную
// дату на количество секунд в часах (60*60)
$hours = floor(($diff - $years * 365*60*60*24 
       - $months*30*60*60*24 - $days*60*60*24)
                                   / (60*60)); 
  
  
// Чтобы получить минуты, вычтем их с годами,
// месяцами, секундами и часами и разделим
// на итоговую дату в секундах, т.е. 60
$minutes = floor(($diff - $years * 365*60*60*24 
         - $months*30*60*60*24 - $days*60*60*24 
                          - $hours*60*60)/ 60); 
  
  
// Чтобы получить минуты, вычтем их с годами,
// месяцами, секундами, часами и минутами
$seconds = floor(($diff - $years * 365*60*60*24 
         - $months*30*60*60*24 - $days*60*60*24
                - $hours*60*60 - $minutes*60)); 
  
// Распечатываем результат
printf("%d years, %d months, %d days, %d hours, "
     . "%d minutes, %d seconds", $years, $months,
             $days, $hours, $minutes, $seconds); 
?>

Вывод:

2 года, 3 месяца, 21 день, 11 часов, 59 минут, 1 секунда

Метод 3: Получение общего количества дней между двумя указанными датами.

<?php
  
// Определим две даты
$start_date = strtotime("2018-06-08");
$end_date = strtotime("2018-09-19");
  
// Получаем разницу и делим на
// общее количество секунд 60/60/24, чтобы получить
// количество дней
echo "Difference between two dates: "
    . ($end_date - $start_date)/60/60/24;
?>

Вывод:

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