Función Para Fechas Con Diferencia Humana (Time Ago)

Esta función muestra las fechas como las vemos en el Timeline de twitter o facebook por e.j. ‘1 hour ago’, ‘hace 2 minutos’, ‘hace 5 segundos’, etc. Son muy comunes si no se le quiere mostrar al usuario una fecha complicada para leer. Los formatos de fechas que permite son:

  • Date (YYYY-MM-DD)
  • Datetime / Timestamp (YYYY-MM-DD HH:MM:SS / YY-MM-DD HH:MM:SS)
function time_ago($date) {
  
  if(empty($date)) {
   return "No date provided";
  }
 
  $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
 
  $lengths = array("60","60","24","7","4.35","12","10");
 
  $now = time();
 
  $unix_date = strtotime($date);
 
  /* check validity of date */
  if(empty($unix_date)) {
   return "Bad date";
  }
 
  /* is it future date or past date */
  if($now > $unix_date) {
    $difference = $now - $unix_date;
    $tense = "ago";
  } else {
    $difference = $unix_date - $now;
    $tense = "from now";
  }
 
  for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
    $difference /= $lengths[$j];
  }
 
  $difference = round($difference);
 
  if($difference != 1) {
    $periods[$j].= "s";
  }
 
  return "$difference $periods[$j] {$tense}";
}

Uso

Para hacer uso de la función solo tienes que llamarla.

echo time_ago( 'time-here' );