Escribir Fechas Estilo Facebook


Con esta simple función se pueden escribir fechas con el estilo de Facebook, por ejemplo:

hace 2 minutos

hace 1 año

hace 25 segundos

y si la fecha está en el futuro tambien nos lo indica:

desde ahora en 30 segundos

Se trata de una función lllamada fn_FacebookTime, más abajo os dejo el código. Sólo basta llamarla de la siguiente manera:

$date = "23-03-2015 12:24:34"; // Esta fecha es la que se compara con la actual.
echo fn_FacebookTime($date);


Este es el código de la función:

/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
//
//
//         Función que convierte una determinada fecha y hora a estilo Facebook
//                               Valencia Páginas Web
//
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
function fn_FacebookTime($date)
{
    date_default_timezone_set("Europe/Madrid");
    if(empty($date)) {
        return "No date provided";
    }
  
    $periods         = array("segundo", "minuto", "hora", "dia", "semana", "mes", "año", "década");
    $lengths         = array("60","60","24","7","4.35","12","10");
  
    $now             = time();
    $date            = date("Y-m-d H:i:s",strtotime($date));
    $unix_date       = strtotime($date);
  
    //Comprobación de la fecha
    if(empty($unix_date)) {  
        return "Fecha Errónea";
    }

    // Es futuro o pasado la fecha
    if($now > $unix_date) {  
        $difference     = $now - $unix_date;
        $tense         = "hace";
      
    } else {
        $difference     = $unix_date - $now;
        $tense         = "desde ahora en";
    }
  
    for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
        $difference /= $lengths[$j];
    }
  
    $difference = round($difference);
  
    // Obteniendo los plurales, en mes se añade "es" y "s" en el resto
    if($difference != 1) {
    if($j==5){
        $periods[$j].= "es";
    } else {
            $periods[$j].= "s";
    }
    }
  
    return "{$tense} $difference $periods[$j] ";
}
/****************************************************************************/
/****************************************************************************/
/****************************************************************************/


Espero que os ayude,

Saludos

No hay comentarios:

Publicar un comentario