¿Se puede mejorar mi función de diferencia horaria de PHP?

A continuación se muestra mi función que llevará una marca de tiempo y le dirá el tiempo que ha pasado desde ahora en el formato de23 días 3 horas 4 minutos 6 segundos

El principal problema es que en mi sitio utilizo DATETIME de mysql en lugar de TIMESTAMP, por lo que para usar esta función debo convertir mi datetime de mysql a una marca de tiempo y luego ejecutarlo a través de mi función.

Así que tengo curiosidad, hay una mejor manera de hacerlo, en algunas páginas donde tengo 100 resultados de mysql, PHP debe convertir 100 fechas en marcas de tiempo y luego ejecutar esto en 100 de ellas.

Me pregunto si hay un mejor método de rendimiento y, por favor, no recomiende todos los marcos PHP (zend, etc.)

Agradecemos cualquier consejo / ayuda

function duration($timestamp) {
    $years = floor($timestamp / (60 * 60 * 24 * 365));
    $timestamp %= 60 * 60 * 24 * 365;
    $weeks = floor($timestamp / (60 * 60 * 24 * 7));
    $timestamp %= 60 * 60 * 24 * 7;
    $days = floor($timestamp / (60 * 60 * 24));
    $timestamp %= 60 * 60 * 24;
    $hrs = floor($timestamp / (60 * 60));
    $timestamp %= 60 * 60;
    $mins = floor($timestamp / 60);
    $secs = $timestamp % 60;
    $str = "";
    if ($years == 1) {
        $str .= "{$years} year ";
    }elseif ($years > 1) {
        $str .= "{$years} yearss ";
    }
    if ($weeks == 1) {
        $str .= "{$weeks} week ";
    }elseif ($weeks > 1) {
        $str .= "{$weeks} weeks ";
    }   
    if ($days == 1) {
        $str .= "{$days} day ";
    }elseif ($days > 1) {
        $str .= "{$days} days ";
    }
    if ($hrs == 1) {
        $str .= "{$hrs} hour ";
    }elseif ($hrs > 1) {
        $str .= "{$hrs} hours ";
    }
    if ($mins == 1) {
        $str .= "{$mins} minute ";
    }elseif ($mins > 1) {
        $str .= "{$mins} minutes ";
    }
    if ($mins < 1 && $secs >= 1) {
        $str .= "{$secs} seconds ";
    }
    return $str;
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta