Estou usando o código a seguir para converter uma data e hora do servidor em hora local usando moment.js.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Mas estou recebendo:
Aviso de descontinuação: a construção do momento volta para js Data. Isso é desencorajado e será removido no próximo grande lançamento. Consulte https://github.com/moment/moment/issues/1407 para obter mais informações.
Parece que não consigo me livrar disso! Como posso corrigir isso?
javascript
date
momentjs
dariush
fonte
fonte
Respostas:
Para se livrar do aviso, você precisa:
Passe uma versão formatada ISO da sua sequência de datas:
moment('2014-04-23T09:54:51');
Passe a string que você possui agora, mas diga a Moment em que formato ela está:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
Converta sua string em um objeto Data JavaScript e passe-o para Moment:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
A última opção é um fallback interno que o Moment suporta por enquanto, com o aviso de console obsoleto. Eles dizem que não apoiarão esse fallback em versões futuras. Eles explicam que o uso
new Date('my date')
é imprevisível demais.fonte
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());
ok? Ou estou apenas suprimindo um problema pronto para travar silenciosamente em um futuro próximo como este?Invalid
resultado de data.Como alternativa, você pode suprimir a exibição do aviso de descontinuação definindo
moment.suppressDeprecationWarnings = true;
fonte
// @ts-ignore
(pelo menos para algumas versões do fuso horário e @ tipos / fuso horário).A construção da data em
moment
internamente usa onew Date()
no javascript. Anew Date()
construção reconhece a sequência de datas nos formatos RFC2822 ou ISO em todos os navegadores. Ao construir ummoment
objeto com data que não esteja nesses formatos, o aviso de reprovação é emitido.Embora os avisos de descontinuação sejam lançados, para alguns formatos, o
moment
objeto será construído com êxito no Chrome, mas não no Firefox ou Safari. Por esse motivo, o processamento da data no Chrome pode gerar resultados conforme o esperado (nem sempre) e gerarInvalid Date
outros.Considere,
02.02.2018
,Chrome -
moment("02.02.2018")._d
->Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)
Firefox -
moment("02.02.2018")._d
->Invalid Date
Safari -
moment("02.02.2018")._d
->Invalid Date
Então o
moment.js
é usado por seu próprio risco, caso os formatos recomendados / padrão não sejam usados.Para suprimir os avisos de descontinuação ,
moment
construção.Exemplo:
moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Exemplo:
moment("2018-02-01T18:30:00.000Z")
- Formato ISOmoment("Thu, 01 Feb 2018 18:30:00 GMT")
- Formato RFC2822 - Formato no Githubmoment.suppressDeprecationWarnings = true;
Sugiro substituir o fallback de entrada no momento.
Como (3) suprimirá todos os avisos, (4) suprimirá apenas o fallback da construção da data. Usando (4), você obterá
Invalid Date
o uso internonew Date()
e outras obsoletas poderão ser vistas no console, para que o momento possa ser atualizado ou os métodos obsoletos possam ser substituídos no aplicativo.fonte
Se sua data é passada para você a partir de uma API como
string
(como meu problema), você pode usar um filtro para converter a string em uma data por um momento. Isso resolverá o momento de aviso de construção.Adicione-o à visualização:
fonte
Conforme indicado nas respostas acima. Fornecer o formato da data deve funcionar.
Por que eu estaria recebendo a mensagem de descontinuação com a seguinte linha de código. Eu pensei que o formato String + deveria resolver o problema.
moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
. Além disso, não tenho controle sobre o formato de data fornecido. Eu sei que posso convertê-lo para o'YYYY-MM-DDTHH:mm:ss'
momento em que não mostra a mensagem de descontinuação. No entanto, de acordo com a documentação, a linha de código deve funcionar. Aqui está a mensagem de reprovação que estou vendo.fonte