Questo è il codice completo che sto usando io
	Codice PHP:
	
function formatdate($timestamp) {
    (!isset($timestamp) || $timestamp<=0 || $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 .'  '. $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ù 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.