Me gustaría mostrar algunas fechas en relación con la fecha actual en un formato amigable para los humanos.
Ejemplos de fechas relativas amigables con los humanos:
- Hace 10 segundos
- 20 minutos a partir de ahora
- Hace 1 día
- Hace 5 semanas
- Hace 2 meses
Básicamente, preservando fielmente el orden de magnitud más alto (y, de preferencia, solo cambiando unidades cuando se pasan 2 de esas unidades, 5 semanas en lugar de 1 mes).
Aunque podría vivir con una biblioteca que tuviera menos control y fechas aún más amigables como:
- ayer
- mañana
- la semana pasada
- Hace pocos minutos
- en un par de horas
¿Alguna biblioteca popular para esto?
javascript
date
formatting
rampion
fuente
fuente
Respuestas:
Desde que escribí esta respuesta, una biblioteca conocida disponible es moment.js .
Hay bibliotecas disponibles , pero es trivial implementarlas usted mismo. Solo use un puñado de condiciones.
Suponga que
date
es unDate
objeto instanciado para el tiempo con el que desea realizar una comparación.Debería adaptar esto para manejar fechas futuras.
fuente
getTimeAgo
función de estilo de Twitter gist.github.com/pomber/6195066a9258d1fb93bb59c206345b38Escribí moment.js , una biblioteca de fechas que hace esto. Tiene aproximadamente
5 KB (2011)52 KB (2019) y funciona en navegadores y en Node. También es probablemente la biblioteca de fechas más popular y famosa para JavaScript.Admite tiempo atrás, formateo, análisis, consultas, manipulación, i18n, etc.
Timeago (tiempo relativo) para fechas en el pasado se ha terminado
moment().fromNow()
. Por ejemplo, para mostrar el 1 de enero de 2019 en el formato timeago:Las cadenas de tiempo atrás se pueden personalizar con
moment.updateLocale()
, por lo que puede cambiarlas como mejor le parezca.Los límites no son los que solicita la pregunta ("5 semanas" frente a "1 mes"), pero se documenta qué cadenas se utilizan para qué intervalo de tiempo.
fuente
Aquí hay algo de John Resig: http://ejohn.org/blog/javascript-pretty-date/
EDITAR (27/6/2014): Continuando con el comentario de Sumurai8 , aunque la página vinculada todavía funciona, aquí está el extracto del
pretty.js
vínculo del artículo anterior:pretty.js
Uso:
Extracto del artículo sobre uso:
Con JavaScript:
Con jQuery:
Faiz: Hizo algunos cambios en el código original, correcciones de errores y mejoras.
fuente
sugar.js tiene excelentes funciones de formato de fecha.
No solo eso, también proporciona funciones comunes de propósito general como formato de cadena, formato de número, etc. que son convenientes de usar.
fuente
aquí un ejemplo de azúcar vs momento: para un calendario que muestra semanas, necesitaba el valor del último lunes:
moment.js
sugar.js
Prefiero el azúcar y después de algunos meses con moment.js ahora cambio a sugar.js. es más claro y se integra muy bien con la clase Date de Javascripts.
Los casos de OP están cubiertos por ambas bibliotecas, para sugar.js, consulte http://sugarjs.com/dates
fuente
Este script js es muy bueno. Todo lo que tienes que hacer es ejecutarlo. Todas
<time>
etiquetas se cambiarán a fechas relativas y se actualizarán cada pocos minutos, por lo que la hora relativa siempre estará actualizada.http://timeago.yarp.com/
fuente
Parece que podrías usar http://www.datejs.com/
¡Tienen un ejemplo en la página principal que hace exactamente lo que estás describiendo!
EDITAR: En realidad, creo que invertí tu pregunta en mi cabeza. En cualquier caso, creo que podrías echarle un vistazo, ¡ya que es una gran biblioteca de todos modos!
EDITAR x2: Voy a hacerme eco de lo que han dicho los demás http://momentjs.com/ es probablemente la mejor opción disponible en este momento.
EDITAR x3: No he usado date.js en más de un año. Estoy usando exclusivamente momentjs para todas mis necesidades relacionadas con las citas.
fuente