<p>moment (). fromNow () retorna 'Data inválida'</p>

Criado em 7 out. 2018  ·  10Comentários  ·  Fonte: moment/moment

Descrição do problema e etapas para reproduzir:
Estou usando o momento para descobrir a idade da conta de um usuário, usando:
moment(user account created date here).fromNow() mas retorna 'Data inválida'. Isso funcionou antes, mas não funciona mais. A data de criação é semelhante a: 2018-06-07T22:54:07.310Z .
Usar moment(date here).format() funciona bem.
Inclua os valores de todas as variáveis ​​usadas.
A data que uso para formatar e usar a partir de agora é 2018-06-07T22:54:07.310Z
Meio Ambiente:
Discord Bot
Exemplos: Chrome 49 no OSX, Internet Explorer 10 no Windows 7, Node.JS 4.4.4 no Ubuntu 16.0.4
Eu não uso o momento para nada listado acima.
Tanto o navegador quanto o sistema operacional são importantes para nós, principalmente se você tiver um ambiente incomum, como um aplicativo IOT.

Outras informações que podem ser úteis: https://i.imgur.com/4LFsZh3.png

  • A configuração de fuso horário da máquina em que o código está sendo executado: PST
  • A hora e a data em que o código foi executado: 12h20, 7/10/18
  • Outras bibliotecas em uso (TypeScript, Immutable.js, etc) Nenhuma

Se você estiver relatando um problema, execute o seguinte código no ambiente que está usando e inclua a saída:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

Dom, 07 de outubro de 2018, 12:29:05 GMT-0700 (Horário de verão do Pacífico)
07/10/2018 12:29:05
420
2.22.2
Certifique-se de que seu problema seja isolado no momento.

Bug

Comentários muito úteis

Obrigado pela resposta. Estou usando o NodeJS, portanto, não há um ambiente de navegador.

nova Data ()). toString () Qui, 17 de janeiro de 2019 06:53:11 GMT-0600 (Horário Padrão Central)
nova Data ()). toLocaleString (): 17/01/2019, 6:53:11 AM
new Date ()). getTimezoneOffset (): 360
moment.version: 2.23.0
NodeJS é v11.6.0

Tenho feito alguns testes e o conflito é um construtor Object.prototype.

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

Todos 10 comentários

Como você executa seu Discord Bot?

Você disse: _ "Isso funcionou antes, mas não funciona mais" _
Alguma coisa mudou desde que funcionou - por exemplo, você atualizou o ambiente em que seu bot discord é executado? O formato da 'data de criação da conta do usuário' mudou?

Você é capaz de modificar o código do seu bot discord para mostrar o resultado a seguir (especificamente usando strings embutidas em código):

console.log('moment.format:', moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', moment("2018-06-07T22:54:07.310Z").fromNow());

Ele estava funcionando antes, então, apenas parou. Nenhum código alterado. Nenhum ambiente mudou com o bot. A maneira como as datas estão sendo analisadas também parece a mesma.

E aqui está a saída do console;

moment.format: 2018-06-07T15:54:07-07:00
moment.fromNow: Invalid date

e aqui está como eu usei ( this.client.moment é como eu defini o momento):

 console.log('moment.format:', this.client.moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', this.client.moment("2018-06-07T22:54:07.310Z").fromNow());

Não tenho certeza se mencionei isso ou não, mas aqui estão as versões atuais que estou usando:
"momento": "^ 2.22.2",
"formato-duração-momento": "^ 2.2.2"
e estou na v8.9.2 do nó

Estou tendo um problema semelhante com o Angular 6 (aplicativo com base iônica) e o momento 2.22.2 retorna uma data inválida para algo tão simples como isso.
moment(new Date()).fromNow();
Por favor informar.

Ainda acontecendo em 2.23.0

time = moment('2017-08-08T18:29:07.000Z')
time.isValid() // true
time.toNow() // Invalid date
time.fromNow() // Invalid date

Obrigado por abrir este pedido
Oi! Obrigado por registrar este problema! Infelizmente, não consigo reproduzir isso. Você poderia fornecer alguma outra informação?

Ajuda se você executar estas linhas em suas máquinas:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

Obrigado pela resposta. Estou usando o NodeJS, portanto, não há um ambiente de navegador.

nova Data ()). toString () Qui, 17 de janeiro de 2019 06:53:11 GMT-0600 (Horário Padrão Central)
nova Data ()). toLocaleString (): 17/01/2019, 6:53:11 AM
new Date ()). getTimezoneOffset (): 360
moment.version: 2.23.0
NodeJS é v11.6.0

Tenho feito alguns testes e o conflito é um construtor Object.prototype.

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

Eu também sou afetado por isso.
No início, eu acreditei que usar um carimbo de data / hora unix incompleto (como os dados são fornecidos para mim) no construtor era a causa, mas ao testar o código de exemplo na documentação do MomentJS, descobri que qualquer chamada para fromNow() retornou Invalid Date .

Mesmo problema aqui.

toString Tue Jan 07 2020 10:20:09 GMT+0100 (Central European Standard Time)
toLocaleString 1/7/2020, 10:20:09 AM
getTimezoneOffset -60
navigator.userAgent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
moment.version 2.24.0

O mesmo aqui em "moment": "^2.24.0", . Funciona bem quando executado no navegador, mas falha no nodejs. Qualquer solução alternativa até ser corrigida? @marwahaha

É um hack, mas você pode alterar as extensões Object.prototype para que não sejam enumeráveis:

console.log(moment().fromNow()); // 'a few seconds ago'
Object.prototype.randomExtension = true;
console.log(moment().fromNow()); // 'Invalid date'

Object.keys(Object.prototype).forEach(function(extension) {
  Object.defineProperty(Object.prototype, extension, { enumerable: false });
});

console.log(moment().fromNow()); // 'a few seconds ago'
Esta página foi útil?
0 / 5 - 0 avaliações