Cómo formatear la hora desde xxx, por ejemplo, "hace 4 minutos", similar a los sitios de Stack Exchange
La pregunta es cómo formatear un JavaScript Date
como 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
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
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.