Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP Konvertiert das Datum in ein leeres Datum vor Tagen/Stunden/Sekunden

Sie sollten Ihre Daten immer im datetime-Format von MySQL (JJJJ-MM-TT) speichern. Dadurch können Sie ganz einfach die eingebaute Datumsfunktion von MySQL nutzen. Das Speichern in einem anderen Format bedeutet (möglicherweise viel) mehr Arbeit für Sie, wenn Sie mehr tun möchten, als nur diese Werte anzuzeigen.

Um das zu erreichen, was Sie mit PHP machen möchten, würden Sie DateTime() (basierend auf dieser Antwort ). ):

$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);

Diese Zeilen erzeugen DateTime() Objekte mit ihren jeweiligen Daten.

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

Diese Zeile subtrahiert das zweite Datum vom ersten und gibt die Differenz als DateInterval() zurück Objekt.

if ($interval->days > 7)

Diese Zeile überprüft, ob zwischen den beiden Datumsangaben sieben oder mehr Tage vergangen sind. Wenn dies der Fall ist, wird der erste Codeblock ausgeführt. Wenn nicht, wird das erste Datum ausgedruckt.

$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;

Dieser Codeblock nimmt einfach die Datumsdifferenz zwischen den beiden Daten (ein DateInterval() Objekt) und formatiert es in dem von Ihnen gewünschten Format. Die zweite Zeile entfernt alle Zeiträume, die keine Werte haben (z. B. 0 Monate), und entfernt sie aus der Zeichenfolge. Die dritte Zeile nimmt beliebige Perioden mit einem Wert (z. B. 1 Monat) und entfernt das unnötige 's' am Ende (z. B. 1 Monat wird zu 1 Monat).