Cuanto tiempo hace desde una fecha.
Por redribera, el 26 Febrero 2010
Quiero compartir con vosotros, lectores de redribera, este artÃculo, donde os indicaré el código necesario en php para averiguar, cuanto tiempo ha transcurrido desde una determinada fecha, hasta el momento actual.
No solo cuanto tiempo ha transcurrido, sino una forma peculiar de expresar o formatear este mismo tiempo de una forma legible para un usuario humano.
Si es usted un webmaster y programa en php, este script puede llegar a serle de mucha utilidad, sino programa con php, también, porque al fin y al cabo cambiando un poco la sintaxis es lo mismo.
Fijese en esta imagen:

La imagen muestra 3 mensajes del sistema de comentarios de juegos de esta misma web. Hace unos dias que querÃa modificarlo. Anteriormente en lugar de aparecer los textos …. hace 37 segundos, hace 4 minutos… lo que aparecÃa era la fecha en la que se envió el mensaje, formateada con la función date de php. Por ejemplo Thu, 25 Feb 2010.
Sin embargo para un sistema de comentarios, de una web (blogs, foros, artÃculos, tutoriales….), me parece mas intuitivo para el navegante mostrar la información del tiempo transcurrido desde un mensaje en el formato que aparece en la imagen. La idea no es mia, la he cogido de Facebook.
  Lo cierto es que es un sistema que se puede encontrar en multitud de redes sociales o sitios donde hay formadas grandes comunidades de usuarios que dejan mensajes. Es mas COOL !
Lo habitual , es que los sistemas de envios de comentarios de un sitio web, además de almacenar datos como el mensaje, el usuario o su email, almacenen el momento del envio en algún campo de una tabla como una fecha, o un TIMESTAMP de Unix (el número de segundos desde 00:00:00 UTC del 1 de enero de 1970 (UNIX Epoch) hasta el momento en que se crea el timestamp).
Si disponemos de este ingrediente, podremos saber el tiempo transcurrido desde esta fecha, hasta el momento actual y formatear el mensaje de tiempo transcurrido desde un mensaje, de modo adecuado.
Fijense en este script php, en el que desarrollamos la función cuantoHace:
/*Calcula el tiempo que hace desde $PublishDate hasta la fecha actual, con arreglo a un
formato personalizado: Muestra segundos, minutos, horas, o dias transcurridos.*/
$actual=time();
$dif=$actual-$PublishDate;
$segundos = $dif;
$segundos > 0 ? $segundos_text = $segundos." segundos " : $segundos_text = "";
$minutos = floor($dif/(60));
$minutos > 1 ? $minutos_text=$minutos." minutos " : $minutos_text = "";
$minutos == 1 ? $minutos_text = $minutos." minuto " : $minutos_text = $minutos_text;
$horas = floor($dif/(60*60));
$horas > 1 ? $horas_text = $horas." horas ":$horas_text = "";
$horas == 1 ? $horas_text = $horas." hora " : $horas_text = $horas_text;
$dias = floor($dif/(60*60*24));
$dias > 1 ? $dias_text = $dias." dias " : $dias_text = "";
$dias == 1 ? $dias_text = $dias." dia " : $dias_text = $dias_text;
/*El texto a mostrar para saber el tiempo transcurrido entre la fecha dada y el momento actual…..*/
$time_dif_text="";
$segundos > 0 ? $time_dif_text=$segundos_text : $time_dif_text = $time_dif_text;
$minutos > 0 ? $time_dif_text = $minutos_text : $time_dif_text = $time_dif_text;
$horas > 0 ? $time_dif_text = $horas_text : $time_dif_text = $time_dif_text;
$dias > 0 ? $time_dif_text = $dias_text : $time_dif_text = $time_dif_text;
$dias > 5 ? $time_dif_text = " el ".date("d-M-Y",$PublishDate) : $time_dif_text = " hace ".$time_dif_text;
return $time_dif_text
}
Este es el script que he utilizado yo para mi sistema de comentarios. En este caso ya disponemos de la fecha formateada como un TIMESTAMP en la variable $PublishDate . Conseguir este resultado de fecha como TIMESTAMP, no es el objetivo de este Tip, y dependerá también del formato de los datos recuperados, o como están almacenados en nuestra base de datos. Aquà les dejo un enlace a un breve tutorial que les puede ser de utilidad para conocer el formato de fechas php y como convertir fechas a TIMESTAMP y viceversa: Apuntes de php, fechas.
Finalmente, comentar brevemente como actua este script.
Al final de la pelÃcula, el valor de retorno de la función cuantoHace será el de la variable $time_dif_text, y este es una cadena que contendrá un texto, el cual podremos intercalar entre código html, para mostrar el tiempo transcurrido.
Puesto que este script está desarrollado para mi propio uso y disfrute
, lo he moldeado según mis necesidades, de modo que este trabaja de la siguiente forma.
Si el tiempo transcurrido es inferior a un minuto, muestra el número de segundos. Si el tiempo transcurrido es inferior una hora y superior a un minuto, muestra el número de minutos transcurridos, omitiendo el número de segundos . Lo mismo sucede con las horas. Por ello el script realmente pierde precisión ya que mostrará el texto hace 5 minutos , independientemente de que haga 5 minutos y medio o cinco minutos y 40 segundos. Finalmente, si han transcurrido mas de 5 dias desde el envio, si que plasmamos la fecha formateada como dia-mes-año.
Por todo esto, el orden en que están puestas las lÃneas condicionales del script es importante, ya que el valor de la variable $time_dif_text se va sobreescribiendo según sea necesario. De todos modos con un poco mas de trabajo siguiendo esta forma, se puede conseguir formatear estas diferencias de tiempo de cualquier modo.
Creo que el resto del script es bastante explicativo.
Espero que les haya sido de utilidad.
Si dejan un comentario en el post expresando su opinión, se lo agradeceré, como pago a este tutorial totalmente free!
Un saludo para Usted!
Julio.
|
|
Compartelo
|
||
| |||
Compartelo






















Muy buenas! estoy me viene como anillo al dedo… pero que pasa si en mi bbdd las fechas solo son 26-03-2010, es decir, no tiene HHMMSS como puedo cambiarlo?
añadir que guardo la fecha con la funcion NOW()
El parametro $PublishDate es un TIMESTAMP de UNIX (es un numero entero).. Utiliza la función de php strtotime para transformar tu fecha en formato de texto y convertirla en un TIMESTAMP de UNIX.
Mira mas información en : http://php.net/manual/en/function.strtotime.php
Un saludo !