Cómo formatear la hora desde xxx, por ejemplo, "hace 4 minutos", similar a los sitios de Stack Exchange

Resuelto Sky Sanders asked hace 14 años • 0 respuestas

La pregunta es cómo formatear un JavaScript Datecomo una cadena que indique el tiempo transcurrido de manera similar a la forma en que ves los tiempos mostrados en Stack Overflow.

p.ej

  • Hace 1 minuto
  • 1 hora antes
  • Hace 1 día
  • Hace 1 mes
  • hace 1 año
Sky Sanders avatar Jul 05 '10 14:07 Sky Sanders
Aceptado

function timeSince(date) {

  var seconds = Math.floor((new Date() - date) / 1000);

  var interval = seconds / 31536000;

  if (interval > 1) {
    return Math.floor(interval) + " years";
  }
  interval = seconds / 2592000;
  if (interval > 1) {
    return Math.floor(interval) + " months";
  }
  interval = seconds / 86400;
  if (interval > 1) {
    return Math.floor(interval) + " days";
  }
  interval = seconds / 3600;
  if (interval > 1) {
    return Math.floor(interval) + " hours";
  }
  interval = seconds / 60;
  if (interval > 1) {
    return Math.floor(interval) + " minutes";
  }
  return Math.floor(seconds) + " seconds";
}
var aDay = 24*60*60*1000;
console.log(timeSince(new Date(Date.now()-aDay)));
console.log(timeSince(new Date(Date.now()-aDay*2)));
Expandir fragmento

Sky Sanders avatar Jul 05 '2010 07:07 Sky Sanders

Puede ser una exageración en este caso, pero si se presenta la oportunidad, ¡ moment.js es simplemente increíble!

Moment.js es una biblioteca de fecha y hora de JavaScript, para usarla en tal escenario, harías:

moment(yourdate).fromNow()

http://momentjs.com/docs/#/displaying/fromnow/

Anexo de 2018 : Luxon es una nueva biblioteca moderna y puede que valga la pena echarle un vistazo.

Anexo de 2022 : Day.js es una biblioteca más nueva que es aproximadamente un 80% más liviana que Luxon con capacidades similares.

Fabiano Soriani avatar Apr 16 '2013 16:04 Fabiano Soriani