Należy zawsze zapisywać daty w formacie daty i godziny MySQL (RRRR-MM-DD). Pozwala to na łatwe korzystanie z wbudowanej funkcji daty w MySQL. Przechowywanie go w jakimkolwiek innym formacie oznacza (potencjalnie dużo) więcej pracy dla Ciebie, gdy chcesz zrobić więcej niż tylko wyświetlanie tych wartości.
Aby osiągnąć to, co chcesz zrobić z PHP, DateTime()
(na podstawie tej odpowiedzi
):
$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);
Te wiersze tworzą DateTime()
obiekty z odpowiednimi datami.
$interval = $datetime1->diff($datetime2);
Ta linia odejmuje drugą datę od pierwszej i zwraca różnicę jako DateInterval()
obiekt.
if ($interval->days > 7)
Ten wiersz sprawdza, czy między dwiema datami upłynęło siedem lub więcej dni. Jeśli tak, wykonywany jest pierwszy blok kodu. Jeśli nie, drukowana jest pierwsza data.
$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;
Ten blok kodu przyjmuje tylko różnicę dat między dwiema datami (DateInterval()
obiekt) i sformatuje go w żądanym formacie. Drugi wiersz usuwa wszelkie okresy czasu, które nie mają wartości (tj. 0 miesięcy) i usuwa je z ciągu. Trzecia linia przyjmuje dowolne okresy z jedną wartością (tj. 1 miesiąc) i odcina niepotrzebne „s” na końcu (tj. 1 miesiąc staje się 1 miesiącem).