La pregunta es cómo formatear un JavaScript Date
como una cadena que indica que el tiempo transcurrido es similar a la forma en que ves las horas que se muestran en Stack Overflow.
p.ej
- Hace 1 minuto
- 1 hora antes
- Hace 1 día
- Hace 1 mes
- hace 1 año
javascript
date-formatting
Sanders del cielo
fuente
fuente
Intl.RelativeTimeFormat.prototype.format()
.Respuestas:
fuente
Puede ser una exageración en este caso, pero si la oportunidad muestra moment.js es simplemente increíble.
Moment.js es una biblioteca de fecha y hora de JavaScript, para usarla en ese escenario, haría:
http://momentjs.com/docs/#/displaying/fromnow/
Anexo 2018 : ¡ Luxon es una nueva biblioteca moderna y podría valer la pena!
fuente
No lo he comprobado (aunque no sería difícil), pero creo que los sitios de Stack Exchange usan el
jquery.timeago
complemento para crear estas cadenas de tiempo .Es bastante fácil usar el complemento, y está limpio y se actualiza automáticamente.
Aquí hay una muestra rápida (de la página de inicio del complemento):
fuente
Esto le mostrará formatos de tiempo pasados y anteriores como 'Hace 2 días' 'dentro de 10 minutos' y puede pasarlo como un objeto Fecha, una marca de tiempo numérica o una cadena de fecha
fuente
return time;
conformat = time_formats[time_formats.length - 1]; return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
para devolver siglos durante largos períodos de tiempo en lugar de los milisegundos.Aquí hay una pequeña modificación en la solución de Sky Sander que permite ingresar la fecha como una cadena y es capaz de mostrar tramos como "1 minuto" en lugar de "73 segundos"
fuente
interval = Math.floor(seconds / 60);
. Agreguéinterval = seconds;
a la finalelse
y funciona bien.let seconds = Math.floor((+new Date() - date) / 1000);
interval === 0
en el últimoif
?Es posible que desee ver humanized_time_span: https://github.com/layam/js_humanized_time_span
Es un marco agnóstico y totalmente personalizable.
Simplemente descargue / incluya el script y luego puede hacer esto:
o incluso esto:
Lea los documentos para más información.
fuente
NaN years ago
por qué?humanized_time_span("2011/05/11 12:00:00")
Cambió la función anterior a
De lo contrario, mostraría cosas como "75 minutos" (entre 1 y 2 horas). También ahora supone que la fecha de entrada es una marca de tiempo de Unix.
fuente
Código mucho legible y compatible con el navegador cruzado:
Según lo dado por @Travis
fuente
Una versión más corta utilizada por Lokely :
fuente
Infinity seconds ago
a partir de ahora, unix timestamp param,
fuente
Una versión ES6 del código proporcionado por @ user1012181
Editado con sugerencias de @ ibe-vanmeenen. (Gracias !)
fuente
Versión simple y legible:
fuente
Escribo uno con js y python, usado en dos proyectos, muy agradable y simple: una biblioteca simple (menos de 2kb) utilizada para formatear la fecha con
*** time ago
declaración.simple, pequeño, fácil de usar y bien probado.
npm install timeago.js
import timeago from 'timeago.js'; // or use script tag
usar api
format
.Muestra:
También puedes renderizar en tiempo real.
fuente
import { format, render, cancel, register } from 'timeago.js';
Aunque la pregunta se hizo hace bastante tiempo, escribir esta respuesta con la esperanza de que ayude a alguien.
Pase la fecha desde la que desea comenzar a contar. Uso
moment().fromNow()
de momentjs : (Ver más información aquí )Si desea cambiar la información proporcionada para las fechas de Ahora, escriba su hora relativa personalizada por el momento.
Por ejemplo, en mi propio caso quería imprimir en
'one month ago'
lugar de'a month ago'
( provisto por moment (d) .fromNow () ). En este caso, puede escribir algo a continuación.NOTA : Escribí mi código para el proyecto en Agular 6
fuente
También puede usar el complemento dayjs relativeTime para resolver esto.
fuente
Esto debería manejar adecuadamente cualquier marca de tiempo válida, incluyendo Date.now (), unidades singulares y fechas futuras. Dejé fuera meses, pero deberían ser fáciles de agregar. Traté de mantenerlo lo más legible posible.
fuente
He modificado la versión de Sky Sanders. Las operaciones Math.floor (...) se evalúan en el bloque if
fuente
return days + "1 day ago";
debería serreturn "1 day ago";
fuente
fuente
Mi solución..
fuente
Mi puñalada a esto se basa en otras respuestas.
fuente
Estaba buscando una respuesta a esto y casi implementé una de estas soluciones, pero un colega me recordó que revisara la
react-intl
biblioteca ya que ya la estábamos usando.Entonces, agregando a las soluciones ... en el caso de que esté utilizando la
react-intl
biblioteca, tienen un<FormattedRelative>
componente para esto.https://github.com/yahoo/react-intl/wiki/Components#formattedrelative
fuente
Esto es lo que hice (el objeto devuelve la unidad de tiempo junto con su valor):
fuente