PHP Преобразование даты в «пустые» дни / часы / секунды назад

Я хочу конвертировать дату () в «» годы / месяцы / недели / дни / часы / минуты / секунды назад. Как мне это сделать?

В настоящее время я использую date('M j, Y') при сохранении даты в базе данных. Есть ли более эффективный способ сохранить дату для того, что я хочу создать выше?

(Мой сайт еще не в сети, поэтому я могу делать все, что мне нужно в базе данных и, если нужно, код)

Вы всегда должны сохранять свои даты в формате даты и времени MySQL (ГГГГ-ММ-ДД). Это позволяет вам легко использовать встроенные функции MySQL. Хранение его в любом другом формате означает (потенциально много) больше работы для вас, когда вы хотите сделать больше, а затем просто отображать эти значения.

Чтобы выполнить то, что вы хотите сделать с PHP, вы должны использовать DateTime() (на основе этого ответа ):

 $datetime1 = new DateTime($firstDate); $datetime2 = new DateTime($secondDate); $interval = $datetime1->diff($datetime2); if ($interval->days <= 7) { $elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds'); $elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed); $elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed); echo $elapsed; } else { echo $firstDate; } $datetime1 = new DateTime($firstDate); $datetime2 = new DateTime($secondDate); 

Эти строки создают объекты DateTime() с соответствующими датами.

 $interval = $datetime1->diff($datetime2); 

Эти строки вычитают вторую дату из первой и возвращают разницу в качестве DateInterval() .

 if ($interval->days > 7) 

Эта строка проверяет, прошло ли между двумя датами семь или более дней. Если это так, то выполняется первый блок кода. Если нет, будет распечатана первая дата.

 $elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds'); $elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed); $elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed); echo $elapsed; 

Этот блок кода просто использует разницу дат между двумя датами (объект DateInterval() ) и форматирует его в запрошенном формате. Во вторых строках удаляются любые периоды времени, которые не имеют значений (т. Е. 0 месяцев) и удаляют их из строки. Третья строка берет любые периоды с одним значением (т.е. 1 месяц) и обрезает ненужные 's' в конце (т.е. 1 месяц становится 1 месяцем).