Я хочу конвертировать дату () в «» годы / месяцы / недели / дни / часы / минуты / секунды назад. Как мне это сделать?
В настоящее время я использую 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 месяцем).