Винаги трябва да запазвате вашите дати във формата за дата и час на 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;
Този кодов блок просто взема разликата в датата между двете дати (a DateInterval()
обект) и го форматира във формата, който сте поискали. Вторият ред премахва всички периоди от време, които нямат стойности (т.е. 0 месеца) и ги премахва от низа. Третият ред приема всички периоди с една стойност (т.е. 1 месец) и отрязва ненужните '' в края (т.е. 1 месец става 1 месец).