Mostrar un texto amigable con el lapso de tiempo que ha transcurrido desde el momento actual hasta una fecha determinada del pasado.
Vamos a implementar una funcionalidad para mostrar mensajes comotipo “hace 10 minutos” o “hace 2 días” usando JavaScript y la api Intl.RelativeTimeFormat
sin librerías externas.
Primero necesitamos calcular la diferencia entre dos fechas: la actual y la fecha objetivo. Luego, debemos decidir cuál es la unidad más adecuada para expresar esa diferencia (segundos, minutos, horas, días, etc.).
function getTimeAgo(date) { const now = new Date(); const seconds = Math.floor((now - date) / 1000);
const intervals = { year: 31536000, month: 2592000, week: 604800, day: 86400, hour: 3600, minute: 60, second: 1 };
for (const [unidad, segundosPorUnidad] of Object.entries(intervals)) { const valor = Math.floor(seconds / segundosPorUnidad); if (valor >= 1) { return new Intl.RelativeTimeFormat('es', { numeric: 'auto' }) .format(-valor, unidad); } }
return 'justo ahora';}
En este fragmento:
Intl.RelativeTimeFormat
.La llamada a format(-valor, unidad)
usa valores negativos porque nos referimos a un tiempo pasado.
Supongamos que tenemos una lista de comentarios y queremos mostrar cuánto tiempo ha pasado desde que fueron creados.
const fechaComentario = new Date('2025-04-15T10:24:00');console.log(getTimeAgo(fechaComentario));
Podemos integrar esta función fácilmente en cualquier parte de nuestro código, incluso como parte del renderizado de un componente, una plantilla o un elemento HTML.
La API Intl.RelativeTimeFormat
está disponible en la mayoría de los navegadores modernos, incluyendo versiones recientes de Chrome, Firefox, Edge y Safari. Si trabajamos con navegadores antiguos (como Internet Explorer), podríamos necesitar un polyfill.
También es importante tener en cuenta el idioma. En el ejemplo usamos 'es'
, pero podemos cambiarlo a 'en'
, 'fr'
, 'pt'
, etc., según el público de nuestra aplicación.
Podemos mostrar fechas relativas de con JavaScript nativo usando Intl.RelativeTimeFormat
. La lógica no es compleja y nos permite reducir dependencias en nuestro proyecto. Si bien no cubre todos los casos posibles (como cambios automáticos en tiempo real), para mostrar valores estáticos o actualizados manualmente es más que suficiente.