Questo è il codice completo che sto usando io
Codice PHP:
function formatdate($timestamp) {
    (!isset(
$timestamp) || $timestamp<=|| $timestamp==null) ? $time time() : $time $timestamp;
    
    
$hour date('H.i:s' $time);
    
$mesi = array(1=>'Gen''Feb''Mar''Apr''Mag''Giu''Lug''Ago''Set''Ott''Nov''Dic');
    list(
$sett,$giorno,$mese,$anno) = explode('-',date('w-j-n-Y' $time));
    
$date $giorno .'-'$mesi[$mese] .'-'$anno .'&nbsp&nbsp'$hour .' <span>| ';
    
//timestamp per determinare quanto tempo fa e stata caricate l'immagine
    
$timelapse time() - $time;
    
    switch (
$timelapse) {
    case  (
$timelapse 60): $date .= '1 minuto fa';
        break;
    case ((
$timelapse >= 60) && ($timelapse 3600)): $date .= ceil($timelapse 60) .' minuti fa';
        break;
    case ((
$timelapse >= 3600) && ($timelapse 86400)): $date .= ceil($timelapse 3600) .' ora(e) fa';
        break;
    case ((
$timelapse >= 86400) && ($timelapse 172800)): $date .= 'ieri';
        break;
    case ((
$timelapse >= 172800) && ($timelapse 864000)): $date .= ceil($timelapse 86400) .' giorni fa';
        break;
    case ((
$timelapse >= 864000) && ($timelapse 3024000)): $date .= ceil($timelapse 604800) .' settimane fa';
        break;
    case ((
$timelapse >= 3024000) && ($timelapse 47336400)): $date .= ceil($timelapse 2629800) .' mesi fa';
        break;
    case ((
$timelapse >= 47336400) && ($timelapse 63115200)): $date .= '2 anni fa';
        break;
    case  (
$timelapse >= 63115200):
        (
$timelapse 31557600 15778800) ? $modulus '' $modulus 'e mezzo ';
        
$date .= 'pi&ugrave; di 'floor($timelapse 31557600) .' anni '$modulus .'fa';
        break;
    }
    
$date .='</span>';
    return 
$date;
}

echo 
formatdate(0)."
"
;
echo 
formatdate(null)."
"
;
echo 
formatdate(1334836555); 
Non mi da più il problema dei 42 anni.
Cerca di capire in corrispondenza di quale data ottieni l'errore.