Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

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

#php #время


Каким образом можно детально узнать разницу между двумя датами (сегодняшняя и некая,
записанная в переменной) таким образом, чтобы результат был записан в 4 переменных:
N лет, N месяцев, N часов, N минут? То есть, нужны именно 4 отдельных переменных для
последующей работы с ними.
    


Ответы

Ответ 1



Используйте ООП. Документация DateTime $now = new DateTime(); // текущее время на сервере $date = DateTime::createFromFormat("Y-m-d H:i", '2014-09-12 23:59'); // задаем дату в любом формате $interval = $now->diff($date); // получаем разницу в виде объекта DateInterval echo $interval->y, "\n"; // кол-во лет echo $interval->d, "\n"; // кол-во дней echo $interval->h, "\n"; // кол-во часов echo $interval->i, "\n"; // кол-во минут \n добавлен только для удобства просмотра результатов, соответственно вместо echo присваиваем переменным или работаем напрямую со свойствами DateInterval

Ответ 2



$date1 = strtotime([первая дата]); $date2 = strtotime([вторая дата]); $diff = ABS($date1 - $date2); Дальше полученную $diff передать в функцию форматирования (например: https://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-e-g-1-day-ago-2-days-ago)

Ответ 3



Мне пришлось писать функцию для себя, может кому понадобится: function getPeriod($date1,$date2){ $interval = date_diff($date1, $date2); $y='';$m='';$d=''; if ($interval->y>0) { if ($interval->y>4) $y .=$interval->y . ' лет'; else if ($interval->y == 1) $y .=$interval->y . ' год'; else $y .=$interval->y . ' года'; $y .= ', '; } if ($interval->m>0) { if ($interval->m>4) $m .= $interval->m . ' месяцев'; else if ($interval->m>1) $m .= $interval->m . ' месяца'; else $m .= $interval->m . ' месяц'; $m .= ', '; } if ($interval->d>0) { if ($interval->d>4) $d .= $interval->d . ' дней'; else if ($interval->d>1) $d .= $interval->d . ' дня'; else $d .= $interval->d . ' день'; } return $y . $m . $d; } ... $date1 = new DateTime('2001-01-1'); $date2 = new DateTime('2012-12-4'); $period = getPeriod($date1,$date2); Пример вывода: 11 лет, 11 месяцев, 1 день

Комментариев нет:

Отправить комментарий