Torna a Blog

PHP: rappresentare le date come su facebook

Capita a volte di avere la necessità di presentare la data in un formato che non sia il classico data/mese/anno ma magari qualcosa di più amichevole nei confronti dei vostri utenti magari proprio come fanno gli amici di Facebook.com. Sicuramente scrivere (e leggere) “Aggiornato 5 ore fa” è molto più naturale e comodo rispetto ad un criptico: “Aggiornato il 22/12/2009 alle 15:32”. Ecco di seguito una funzione in PHP che, partendo da un timestamp in formato UNIX, restituisce una stringa con un formato di data “alla facebook” (giusto per confermare l’esempio che dà il nome a questo post :D)

function timestamp_to_ago($ts){

	$now = time();
	$life = $now-$ts;
	$seconds = $life;
	$minutes = floor($life / 60);
	$hours = floor($life / (60 * 60));
	$days = floor($life / (60 * 60 * 24));

	if($seconds && !$minutes) {
		$qty = $seconds;
		$unit = $seconds == 1 ? 'secondo' : 'secondi';
	}elseif($seconds && $minutes && !$hours){
		$qty = $minutes;
		$unit = $minutes == 1 ? 'minuto' : 'minuti';
	}elseif($seconds && $minutes && $hours && !$days){
		$qty = $hours;
		$unit = $hours == 1 ? 'ora' : 'ore';
	}elseif($seconds && $minutes && $hours && $days){
		$qty = $days;
		$unit = $days == 1 ? 'giorno' : 'giorni';
	}
	$time = "{$qty} {$unit} fa";
	return $time;
}

3 Commenti
  • thehand

    Nel codice, gli && di php sono stati sminchiati dall’editor WYSIWYG che li ha normalizzati per l’HTML…

    Mi piace comunque come avete scritto gli if annidati…PHP stilosissimo… 😛

  • kilotto

    @thehand, corretti.
    come si dice, presenza e competenza… 😀

  • Diego

    ti consiglio di sostituire la terza riga da così:

    $life = $now-$ts;

    a così:

    $life = $now-strtotime($ts);

    in questo modo ogni formato passato prima di essere elaborato verrà convertito in formato UNIX

Lascia un commento