Eu gostaria de exibir algumas datas como relativas à data atual em um formato amigável para humanos.
Exemplos de datas relativas amigas do ser humano:
- 10 segundos atrás
- 20 minutos a partir de agora
- 1 dia atrás
- 5 semanas atrás
- 2 meses atrás
Basicamente preservando fielmente a ordem mais alta de magnitude (e de preferência, apenas mudando as unidades para cima ao passar por 2 dessas unidades - 5 semanas em vez de 1 mês).
Embora eu pudesse viver com uma biblioteca que tivesse menos controle e datas ainda mais amigáveis como:
- ontem
- amanhã
- Semana Anterior
- há alguns minutos atrás
- em algumas horas
Alguma biblioteca popular para isso?
javascript
date
formatting
rampion
fonte
fonte
Respostas:
Desde que escrevi esta resposta, uma biblioteca conhecida disponível é moment.js .
Existem bibliotecas disponíveis , mas é trivial implementá-las você mesmo. Basta usar um punhado de condições.
Suponha que
date
seja umDate
objeto instanciado para o tempo com o qual deseja fazer uma comparação.Você precisaria adaptar isso para lidar com datas futuras.
fonte
getTimeAgo
função de estilo do Twitter gist.github.com/pomber/6195066a9258d1fb93bb59c206345b38Escrevi moment.js , uma biblioteca de datas que faz isso. Tem cerca de
5 KB (2011),52KB (2019) e funciona em navegadores e no Node. Também é provavelmente a biblioteca de datas mais popular e famosa para JavaScript.Ele suporta timeago, formatação, análise, consulta, manipulação, i18n, etc.
Timeago (tempo relativo) para datas no passado é concluído
moment().fromNow()
. Por exemplo, para exibir 1º de janeiro de 2019 no formato timeago:As strings timeago são personalizáveis com
moment.updateLocale()
, portanto, você pode alterá-las como quiser.Os cortes não são o que a pergunta pede ("5 semanas" vs. "1 mês"), mas é documentado quanto a quais strings são usadas em qual intervalo de tempo.
fonte
Aqui está algo do John Resig - http://ejohn.org/blog/javascript-pretty-date/
EDITAR (27/06/2014): Seguindo o comentário de Sumurai8 - embora a página do link ainda funcione, aqui está o trecho do link
pretty.js
para do artigo acima:pretty.js
Uso:
Trecho do artigo sobre o uso:
Com JavaScript:
Com jQuery:
Faiz: Fez algumas alterações no código original, correções de bugs e melhorias.
fonte
sugar.js tem ótimas funções de formatação de data.
Além disso, ele também fornece funções de uso geral comuns, como formatação de strings, formatação de números, etc., que são convenientes de usar.
fonte
aqui um exemplo de açúcar vs momento: para um calendário que exibe semanas, eu precisava do valor da última segunda-feira:
moment.js
sugar.js
Eu prefiro muito mais açúcar e depois de alguns meses com moment.js agora mudo para sugar.js. é mais claro e se integra bem com a classe Date do Javascripts.
Os casos de OP são cobertos por ambas as libs, para sugar.js veja http://sugarjs.com/dates
fonte
Este script js é muito bom. Tudo que você precisa fazer é executá-lo. Todas as
<time>
tags serão alteradas para datas relativas e atualizadas a cada poucos minutos, de modo que a hora relativa estará sempre atualizada.http://timeago.yarp.com/
fonte
Parece que você poderia usar http://www.datejs.com/
Eles têm um exemplo na página principal que faz exatamente o que você está descrevendo!
EDIT: Na verdade, acho que inverti sua pergunta na minha cabeça. Em qualquer caso, acho que você poderia dar uma olhada, pois é uma ótima biblioteca de qualquer maneira!
EDIT x2: Vou repetir o que os outros disseram que http://momentjs.com/ é provavelmente a melhor escolha disponível agora.
EDIT x3: Não uso date.js há mais de um ano. Estou usando o momentjs exclusivamente para todas as minhas necessidades relacionadas a encontros.
fonte