Вы должны всегда сохранять даты в формате даты и времени в MySQL (YYYY-MM-DD). Это позволяет вам легко использовать встроенные функции MySQL. Хранение его в любом другом формате означает (потенциально много) больше работы для вас, когда вы хотите сделать больше, а затем просто отображать эти значения.
Чтобы сделать то, что вы хотите сделать с PHP вы DateTime()
(на основе this answer):
$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 месяцем).
http://stackoverflow.com/a/18602474/67332 –