Moment: Aumento de erro de conversão de data Momemtjs.

Criado em 8 out. 2016  ·  18Comentários  ·  Fonte: moment/moment

Descrição do problema e etapas para reproduzir:
console.log('>>>>>>.', moment(valor).format('MM-DD-AAAA'),momento(valor).format('AAAA-MM-DD'));

Não tenho certeza de onde esse erro foi gerado, não consigo rastrear. Eu tinha adicionado mensagem de aviso.

Meio Ambiente:
Ubuntu, navegador chrome.

OBTENDO ABAIXO DA QUESTÃO

Aviso de descontinuação: o valor fornecido não está em um formato ISO reconhecido. momento construção volta para js Date(), que não é confiável em todos os navegadores e versões. Formatos de data não ISO são desencorajados e serão removidos em uma próxima versão principal. Consulte http://momentjs.com/guides/#/warnings/js -date/ para obter mais informações.
Argumentos:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 27/04/2016, _f: undefined, _strict: undefined, _locale: [object Object]
Erro

Comentários muito úteis

Fazer moment(new Date("27/04/2016")).format.... parece funcionar. Mas acho que há alguns problemas nessa abordagem, talvez relacionados a localidades etc.

Todos 18 comentários

Essa mensagem de aviso ocorre quando você cria um Moment a partir de uma string que não está em um formato ISO 8601 compatível (consulte http://momentjs.com/docs/#/parsing/string/ para obter uma lista de formatos compatíveis).

Nesse caso, parece que você tentou analisar a string 27/04/2016 , que não é um formato ISO. Você pode analisar este formato sem um aviso se informar ao Moment qual é o formato: moment("27/04/2016", "DD/MM/2016") . Como alternativa, você pode alterar o formato de sua entrada para corresponder à especificação ISO: moment("2016-04-27")

Estou encerrando este problema, pois não é um bug no Moment, mas se você ainda tiver dúvidas, me mencione em uma resposta aqui e tentarei ajudar.

Não sou bem-sucedido quando faço um formato ISO 8601 suportado

Fazer moment(new Date("27/04/2016")).format.... parece funcionar. Mas acho que há alguns problemas nessa abordagem, talvez relacionados a localidades etc.

@ziaulrehmandevsinc Funcionou para mim. Obrigado.

@ziaulrehmandevsinc Também funcionou para mim, obrigado

@ziaulrehmandevsinc Também funcionou para mim. Muito obrigado

Trabalhou para mim. Obrigado

No momento, preferimos não ajustar o código para lidar com esse problema. Dentro do moment.js, onde ele exibe o aviso:

função avisar(msg) {
if (hooks.suppressDeprecationWarnings === false &&
(typeof console !== 'undefined') && console.warn) {
console.warn('Aviso de descontinuação: ' + msg);
}

Como se define "hooks.suppressDeprecationWarnings"? Eu revisei a função de ganchos, mas ela relata que ganchos não são uma função. Usando Aurélia.

Obrigado

@pdesimone

// Suppress the warnings
const moment = require('moment');
moment.suppressDeprecationWarnings = true;

// See what else you can mess with
console.log(Object.keys(require('moment')));

Sim, estou recebendo esse problema usando moment('2018-01-20') que, até onde posso dizer, é um formato ISO 8601 válido.

Na época, não consegui fazer com que o supressDepreciationWarnings ou outras soluções funcionassem.

Eu fiz isso em todos os meus usos de momento:

moment(valor, formato), ou seja: Valor: 2018-01-20, Formato: AAAA-MM-DD.

Então o aviso não acontece. Aparentemente, se você deixar o momento "tentar" e descobrir o tipo de encontro, você recebe o aviso...

@ziaulrehman40 funcionou para mim, muito obrigado

Se você acha que está lidando com as coisas corretamente e ainda vê o erro, verifique seus tipos de entrada <input type="date" /> gerará erro, mas <input type="text" /> funciona.

@pdesimone

// Suppress the warnings
const moment = require('moment');
moment.suppressDeprecationWarnings = true;

// See what else you can mess with
console.log(Object.keys(require('moment')));

Obrigado: Está funcionando bem, mas preciso saber se isso causará algum problema ao adicionar avisos de supressão de depreciação

Obrigado, @ziaulrehman40 - :kissing_heart:

Em vez de suprimir os avisos, converta o objeto de data em string ISO antes de formatá-lo usando moment

 const moment = require('moment');

const dateFormatString = "YYYY-MM-DD";

function formatDate(dateObject) {
    var formatted = moment(dateObject.**toISOString()**).format(dateFormatString);
    return formatted;
}
var d = new Date();
var fd = formatDate(d);

console.log(fd);

Teste no Repl.it

Eu também estou tendo problemas com isso.

console.log(moment(this.entities[i].created_at).isValid());
this.entities[i].created_at = moment(this.entities[i].created_at).format("DD-MM-YYYY HH:mm");

O log do console retorna true , mas recebo a mensagem de erro:

value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments: 
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 21-05-2020 19:43, _f: undefined, _strict: undefined, _locale: [object Object]

Um console.log na data em que recebo retorna 2020-05-21 19:43:58.099745+00 .
Alguma sugestão?

@kiocosta Desculpe, você está tendo problemas. Você provavelmente deve analisar com um formato. https://momentjs.com/docs/#/parsing/string -format/ Pode ser uma boa pergunta para o Stack Overflow também.

Esta página foi útil?
0 / 5 - 0 avaliações