BLOG DE DISEÑO WEB CORUÑA

Un poco de todo, recursos, tutoriales, noticias, anuncios...

Calcular fecha pasada relativa con PHP

10/MAY/2013 5.370 visitas Ver comentarios
Calcular fecha pasada relativa con PHP

ADVERTENCIA: Este artículo tiene más de 6 meses de antigüedad. Puede que esta información ya se encuentre obsoleta o haya nuevas y mejores opciones.

Como desarrolladores web, a menudo necesitamos mostrar las fechas en nuestro sitio web. Como usuario, no me gusta leer fechas completos como "26 de noviembre 2011 23:30" porque, inconscientemente, me pongo a hacer la cuenta para saber cuánto tiempo pasó hasta el día de hoy.

Prefiero leer fechas inteligentes como "Hace 1 hora" o "hace 6 meses". Por lo tanto, aquí he escrito una función rápida y sencilla en PHP que muestre la diferencia o tiempo transcurrido basándose en un valor de marca de hora determinado tiempo.

Básicamente definí 2 funciones anteriores:

  • fechainteligente - calcula la diferencia entre marca de tiempo determinado y la hora actual, y luego devuelve la frase correcta. A la que puede pasarse como párametro una fecha en formato inglés (yyyy-mm-dd) o en segundos -time()-.
  • ConSoSinS - modifica la sentencia devuelta a la forma plural o singular.

El uso es simple y directo.
De forma predeterminada, esta función devuelve el valor mínimo, es decir: en vez de volver "Hace 1,7 años", devuelve "Hace 1 año". De todos modos, la función se puede modificar fácilmente para adaptarse a sus necesidades específicas.

Una desventaja de la fecha inteligente es, lógicamente, que se reduce el nivel de detalle de la información de la fecha. Por ejemplo, una fecha de hace 13 meses o 19 meses en ambos casos se muestra como "1 año".

La forma más común para permitir al usuario ver la fecha completa es agregar un atributo "title" con la fecha completa como valor del atributo. Ahora, cuando el usuario pase el ratón por encima de la fecha inteligente, podrá ver la fecha completa como tooltip. Facebook utiliza este enfoque.

Código 1 - PHP
function fechainteligente($timestamp) 
{
	if (!is_int($timestamp)) 
	{
		$timestamp=strtotime($timestamp, 0);
	}
	$diff = time() - $timestamp;
	if ($diff <= 0) return 'Ahora';
	else if ($diff < 60) return "hace ".ConSoSinS(floor($diff), ' segundo(s)');
	else if ($diff < 60*60) return "hace ".ConSoSinS(floor($diff/60), ' minuto(s)');
	else if ($diff < 60*60*24) return "hace ".ConSoSinS(floor($diff/(60*60)), ' hora(s)');
	else if ($diff < 60*60*24*30) return "hace ".ConSoSinS(floor($diff/(60*60*24)), ' día(s)');
	else if ($diff < 60*60*24*30*12) return "hace ".ConSoSinS(floor($diff/(60*60*24*30)), ' mes(es)');
	else return "hace ".ConSoSinS(floor($diff/(60*60*24*30*12)), ' año(s)');
}
Código 2 - PHP
function ConSoSinS($val, $sentence) 
{
	if ($val > 1) return $val.str_replace(array('(s)','(es)'),array('s','es'), $sentence); 
	else return $val.str_replace('(s)', '', $sentence);
}
Código 3 - PHP
echo fechainteligente("1976-11-11");
echo fechainteligente(time()-30);

Acerca del Autor...

Macadia, es una agencia de Diseño Web Coruña, especializada en maquetación css y desarrollo de páginas web a medida con más de 22 años de experiencia en el desarrollo de páginas web profesionales. Si te ha gustado este artículo, por favor, ayúdanos a difundirlo compartiéndolo con tus amigos y contactos en las distintas redes sociales que utilices. ¡Muchas gracias!

Los comentarios han sido desactivados momentaneamente a la espera de que Disqus adapte su plataforma a la próxima RGPD que entra en vigor desde el 25/05/2018