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

URL: http://claudiobonifazi.com

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.