Wie konvertiere ich eine bestimmte Anzahl von Tagen in Jahre, Monate und Tage in MySQL?

Ich versuche, das Datum und die Zeitdauer zwischen dem aufgenommenen Darlehen und dem bezahlten Datum zu ermitteln. Ich habe die Datums- und Zeitfunktionen von PHP verwendet, sie sind jedoch nicht immer korrekt. Wie kann ich das in MySQL genau machen?

Nehmen wir zwei Daten an: Das Datum der Ausleihe

2009-05-24

und das Rückgabedatum des Darlehens

2012-04-30

Ich schreibe eine MySQL-Abfrage

SELECT DATEDIFF('2012-04-30', '2009-05-24') `total_days`;

Rückkehr 1072 Tage, das sind ungefähr 2 Jahre, 11 Monate, 12 Tage.

Bitte antworten Sie nicht mit PHP-Code, ich probiere es bereits. Hier ist der Code.

Die folgende Funktion verwendet PHP> = 5.3-Funktionen und konvertiert Tage in Jahre, Monate und Tage.

function date_interval($date1, $date2)
{
    $date1 = new DateTime($date1);
    $date2 = new DateTime($date2);

    $interval = date_diff($date2, $date1);
    return ((($y = $interval->format('%y')) > 0) ? $y . ' Year' . ($y > 1 ? 's' : '') . ', ' : '') . ((($m = $interval->format('%m')) > 0) ? $m . ' Month' . ($m > 1 ? 's' : '') . ', ' : '') . ((($d = $interval->format('%d')) > 0) ? $d . ' Day' . ($d > 1 ? 's' : '') : '');
}

Die folgende Funktion verwendet PHP> = 5.2-Funktionen und konvertiert Tage in Jahre, Monate und Tage.

function date_interval($date1, $date2)
{
    $diff = abs(strtotime($date2) - strtotime($date1));

    $years = floor($diff / (365 * 60 * 60 * 24));
    $months = floor(($diff - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
    $days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 * 24) / (60 * 60 * 24));

    return (($years > 0) ? $years . ' Year' . ($years > 1 ? 's' : '') . ', ' : '') . (($months > 0) ? $months . ' Month' . ($months > 1 ? 's' : '') . ', ' : '') . (($days > 0) ? $days . ' Day' . ($days > 1 ? 's' : '') : '');
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage