Jak przekonwertować podaną liczbę dni na lata, miesiące i dni w MySQL?

Próbuję uzyskać datę i czas między Pożyczką a datą płatną. Użyłem funkcji daty i godziny PHP, ale nie zawsze jest to dokładne. Jak mogę to zrobić dokładnie w MySQL?

Przyjmijmy dwie daty: Data Pożyczki

2009-05-24

oraz data zwrotu pożyczki

2012-04-30

Piszę zapytanie MySQL

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

powrót 1072 dni, czyli około 2 lat, 11 miesięcy, 12 dni.

Nie odpowiadaj kodem PHP, już go wypróbowałem. Oto kod.

Poniższa funkcja wykorzystuje funkcje PHP> = 5.3 i konwertuje dni na lata, miesiące i dni.

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' : '') : '');
}

Poniższa funkcja wykorzystuje funkcje PHP> = 5.2 i konwertuje dni na lata, miesiące i dni.

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' : '') : '');
}

questionAnswers(4)

yourAnswerToTheQuestion