// Vous lisez...

PHP

Date relative (il y a x jours/heures/minutes/secondes, x days/hours/minutes ago)

J’ai bien aimé cette fonction trouvé sur Dev Zone, mais il manquait quelques trucs pour qu’elle satisfasse tous mes besoins.

- Pluriel de "Month"... oui je sais je chipote
- Deuxième modification : retour en remplaçant des arguments d’une chaine utilisable par sprintf
- Troisième modification (à venir) : internationalisation pour le framework Kohana.

  1. /**
  2.                  * Affiche une date relative sous la forme il y a x jours/heures/minutes/secondes
  3.                  * D'après une fonction postée sur le site Dev Zone
  4.                  *
  5.                  * @param string $iTime timestamp à convertir
  6.                  * @param string $expression argument format d'une chaine utilisable par sprintf
  7.                  * @return void
  8.                  * @author Germain Guglielmetti
  9.                  * @see http://php.net/manual/fr/function.sprintf.php
  10.                  * @see http://www.devzone.fr/snippet-php-afficher-une-date-relative
  11.                  */
  12.                 public static function relative_time($iTime, $expression) {
  13.                         $iTimeDifference = time() - $iTime ;
  14.                         if( $iTimeDifference<0 ) { return; }
  15.                         $iSeconds       = $iTimeDifference ;
  16.                         $iMinutes       = round( $iTimeDifference/60 );
  17.                         $iHours         = round( $iTimeDifference/3600 );
  18.                         $iDays          = round( $iTimeDifference/86400 );
  19.                         $iWeeks         = round( $iTimeDifference/604800 );
  20.                         $iMonths        = round( $iTimeDifference/2419200 );
  21.                         $iYears         = round( $iTimeDifference/29030400 );
  22.                         if( $iSeconds<60 )
  23.                                 return "less than a minute";
  24.                         elseif( $iMinutes<60 )
  25.                                 return sprintf($expression, $iMinutes . ' minute' . ( $iMinutes>1 ? 's' : '' ));
  26.                         elseif( $iHours<24 )
  27.                                 return sprintf($expression, $iHours . ' hour' . ( $iHours>1 ? 's' : '' ));
  28.                         elseif( $iDays<7 )
  29.                                 return sprintf($expression, $iDays . ' day' . ( $iDays>1 ? 's' : '' ));
  30.                         elseif( $iWeeks <4 )
  31.                                 return sprintf($expression, $iWeeks . ' week' . ( $iWeeks>1 ? 's' : '' ));
  32.                         elseif( $iMonths<12 )
  33.                                 return sprintf($expression, $iMonths . ' month' . ( $iMonths>1 ? 's' : '' ));
  34.                         else
  35.                                 return sprintf($expression, $iYears . ' year' . ( $iYears>1 ? 's' : '' ));
  36.                 }