Mostrare differenze di tempo come stringhe


/ Published in: PHP
Save to your folder(s)

Questa piccola funzione riceve come argomento uno unix timestamp e ritorna una stringa contenente la "descrizione verbosa" della differenza di tempo. Ad esempio, usando il timestamp relativo a 5 minuti e mezzo fa, ritornerà la stringa "5 minuti e 30 secondi fa".
nota: Funziona anche con timestamp nel futuro, e dando il timestamp attuale ritorna "Adesso".


Copy this code and paste it in your HTML
  1. /*
  2.  * Web site: http://claudiobonifazi.com
  3.  * Blog: <under construction>
  4.  * Email: claudio.bonifazi@gmail.com
  5.  * Twitter: @ClaudioBonifazi
  6.  */
  7.  
  8.  
  9. function distanzaditempo($data){ // $data = unix timestamp
  10. $diff = time() - $data;
  11. $flag = $diff>0 ? true:false; // data nel passato o nel futuro?
  12. $diff = abs($diff);
  13. $anni = floor($diff / 31536000);
  14. $giorni = floor($diff / 86400) - $anni*365;
  15. $ore = floor($diff / 3600) - $giorni*24;
  16. $minuti = floor($diff / 60) - $ore*60;
  17. $secondi = $diff - $minuti*60;
  18. if($flag)
  19. $frase = $anni>0 ? ($anni>1 ? "$anni anni fa" : "L'anno scorso") :
  20. ($giorni>0 ? "$giorni giorni ".($giorni<3 ? "e $ore ore" : '').' fa' :
  21. ($ore>0 ? "$ore ore ".($ore<8 ? "e $minuti minuti" : '')." fa" :
  22. ($minuti>0 ? "$minuti minuti ".($secondi>0 ? "e $secondi secondi" : '')." fa" :
  23. "$secondi secondi fa")));
  24. else
  25. $frase = $anni>0 ? ($anni>1 ? "tra $anni anni" : 'L\'anno prossimo') :
  26. ($giorni>0 ? ($giorni==1 ? "domani ".($ore>0 ? 'alle '.date('h') : 'alla stessa ora') : "tra $giorni giorni ".($giorni<3 ? "e $ore ore" : '')) :
  27. ($ore>0 ? "tra $ore ore ".($ore<8 ? "e $minuti minuti" : '') :
  28. ($minuti>0 ? "tra $minuti minuti ".($secondi>0 ? "e $secondi secondi" : '') :
  29. "tra $secondi secondi")));
  30. if($diff == 0)
  31. $frase = 'adesso';
  32. return $frase;
  33. }
  34.  
  35.  
  36.  
  37. /*
  38.   ESEMPI
  39.  
  40.   echo "Il post è stato scritto ".distanzaditempo ( time()-120 ); stamperà "Il post è stato scritto 2 minuti fa"
  41.   echo "Il pannello tornerà attivo ".distanzaditempo ( time()+86400 ); stamperà "Il pannello tornerà attivo Domani alla stessa ora"
  42.   echo "Hai aggiunto questo commento ".distanzaditempo ( time() ); stamperà "Hai aggiunto questo commento Adesso"
  43. */

URL: http://claudiobonifazi.com

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.