8

Как вычислить разницу между двумя датами с помощью PHP?

1

У меня есть две даты в следующем формате:

Дата начала: 2007-03-24 
Дата окончания: 2009-06-26

Теперь мне нужно вычислить разницу между этими двумя датами и представить результат в следующем виде:

2 года, 3 месяца и 2 дня

Как я могу это сделать на PHP?

5 ответ(ов)

0

Чтобы вывести разницу между двумя датами в форматах лет, месяцев, дней, часов, минут и секунд, можно использовать следующий код на PHP:

$date1 = "2008-11-01 22:45:00"; 
$date2 = "2009-12-04 13:44:01"; 

$diff = abs(strtotime($date2) - strtotime($date1)); 

$years   = floor($diff / (365*60*60*24)); 
$months  = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); 
$days    = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
$hours   = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60)); 
$minuts  = 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 - $minuts*60)); 

printf("%d years, %d months, %d days, %d hours, %d minuts\n, %d seconds\n", $years, $months, $days, $hours, $minuts, $seconds); 

Объяснение:

  1. Строки дат: Здесь мы определяем две даты $date1 и $date2.
  2. Разница между датами: Для вычисления разницы в секундах, используем strtotime, чтобы конвертировать строки в метки времени.
  3. Вычисление единиц времени:
    • Сначала вычисляем годы, деля общее число секунд на количество секунд в году.
    • Затем вычисляем месяцы, дни, часы, минуты и секунды аналогичным образом, последовательно убирая от общей разницы количество секунд, соответствующее уже найденным годам, месяцам и так далее.
  4. Вывод результата: Используем printf для форматированного вывода, указывая нужные переменные.

Примечание:

В коде есть небольшая опечатка: правильное написание — «minutes», а не «minuts». Вы можете заменить minuts на minutes в коде для корректного вывода.

0

Обратите внимание на следующую ссылку. Это лучший ответ, который я нашел на данный момент. 😃

function dateDiff ($d1, $d2) {

    // Возвращает количество дней между двумя датами:    
    return round(abs(strtotime($d1) - strtotime($d2))/86400);

} // конец функции dateDiff

Не важно, какая дата раньше или позже, когда вы передаете параметры даты. Функция использует абсолютное значение ABS() в PHP, чтобы всегда возвращать положительное число как количество дней между двумя датами.

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

Например, разница (как возвращается вышеуказанной функцией) между 2013-02-09 и 2013-02-14 составляет 5. Но количество дней или дат, представленных диапазоном дат с 2013-02-09 по 2013-02-14, составляет 6.

Ссылка на источник

0

Ваш код имеет небольшую ошибку в функции printf(). Вы забыли указать %d для форматирования, и аргументы нужно передавать корректно. Вот исправленный вариант:

<?php
    $today = strtotime("2011-02-03 00:00:00");
    $myBirthDate = strtotime("1964-10-30 00:00:00");
    printf("Days since my birthday: %d\n", ($today - $myBirthDate) / (60 * 60 * 24));
?>

В этом коде мы используем strtotime() для получения временных меток для "сегодня" и даты рождения. Затем вычисляем разницу между ними, делим на количество секунд в одном дне (60 секунд × 60 минут × 24 часа) и выводим результат. Не забудьте добавить %d в строку формата, чтобы корректно отобразить целое число дней.

0

Не знаю, используете ли вы фреймворк PHP или нет, но многие из них предлагают библиотеки и утилиты для работы с датой и временем, чтобы избежать создания всего с нуля.

Например, в CodeIgniter есть функция timespan(). Просто передайте ей два Unix-временных штампа, и она автоматически создаст результат вроде этого:

1 Год, 10 Месяцев, 2 Недели, 5 Дней, 10 Часов, 16 Минут

Документацию по этой функции можно найти здесь: http://codeigniter.com/user_guide/helpers/date_helper.html

0

Вот рабочий код, который показывает, как вычислить разницу в днях между двумя датами на PHP:

$date1 = date_create('2007-03-24');
$date2 = date_create('2009-06-26');
$diff1 = date_diff($date1, $date2);
$daysdiff = $diff1->format("%R%a");
$daysdiff = abs($daysdiff);

В этом коде мы создаем две даты с помощью функции date_create. Затем с помощью функции date_diff вычисляем разницу между ними. Метод format позволяет извлечь количество дней (%a), а также знак разницы (%R), который мы затем превращаем в абсолютное значение с помощью функции abs, чтобы получить только количество дней между датами, игнорируя знак.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь