[PHP] Funcion Time Ago

on lunes, 1 de julio de 2013
Bueno esta vez vengo a mostrar un codigo sencillo parecido a lo que hace Facebook o Twitter, sobre cuando se hace una publicacion y se quiere saber cuando fue publicada.

Para esto haremos uso de DateTime & DateInterval de PHP, las cuales estan disponibles desde la version 5.3, bueno DateTime desde la 5.2, DateInterval desde la 5.3.

Bueno ya visto esto, ahora les mostrare el codigo, que pues no tiene nada de complicado :P


<?php
function tiempoTranscurrido($val)
{
 if(is_numeric($val)) // Si le enviamos un timestamp(milisegundos) desde 1970
 {
  $fecha = new DateTime();
  $fecha->setTimestamp($val);
 }else if(get_class($val) == 'DateTime'){ // Un objeto DateTime
  $fecha = $val;
 }else{
  $fecha = new DateTime($val); // Un String
 }

 // Obtenemos la diferencia y nos retorna un DateInterval
 $interval = $fecha->diff( new DateTime() );

 if($interval->y > 0)
 {
  $mes = array( 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre' );
  if($interval->d != 0 && $interval->m != 0)
   return 'el ' . $fecha->format('d') . ' de ' . $mes[ $fecha->format('n')-1 ] . ' del ' . $fecha->format('Y');
  
  return 'hace ' . $interval->y . ' a&ntilde;o' . ($interval->y > 1 ? 's' : '');
 }else if($interval->m > 0)
 {
  return 'hace ' . $interval->m . ' mes' . ($interval->m > 1 ? 'es' : '');
 }else if($interval->d > 0)
 {
  $semana = $interval->d/7;
  if($semana == round($semana))
   return 'hace ' . $semana . ' semana' . ($semana > 1 ? 's' : '');
  else if($interval->d == 1)
   return 'ayer';
  else if($interval->d == 2)
   return 'antier';
  
  return 'hace ' . $interval->d . ' d&iacute;a' . ($interval->d > 1 ? 's' : '');
 }else if($interval->h > 0)
 {
  return 'hace ' . $interval->h . ' hora' . ($interval->h > 1 ? 's' : '');
 }else if($interval->i > 0)
 {
  return 'hace ' . $interval->i . ' minuto' . ($interval->i > 1 ? 's' : '');
 }else if($interval->s > 0)
 {
  return 'hace ' . $interval->s . ' segundo' . ($interval->s > 1 ? 's' : '');
 }else{
  return 'ahora';
 }
}

$tiempo = time(); // Hora Actual en Timestamp
echo tiempoTranscurrido( $tiempo )."<br />";

$tiempo = new DateTime('01-03-2013'); // Mi Cumpleaños xD
echo tiempoTranscurrido( $tiempo );


?>


Para una mejor vista pueden checarlo aqui: https://gist.github.com/s00rk/5906706

0 comentarios:

Publicar un comentario