<p>moment (). fromNow () devuelve 'Fecha no válida'</p>

Creado en 7 oct. 2018  ·  10Comentarios  ·  Fuente: moment/moment

Descripción del problema y pasos para reproducirlo:
Estoy usando moment para obtener la edad de la cuenta de un usuario, usando:
moment(user account created date here).fromNow() pero devuelve 'Fecha no válida'. Esto funcionó antes pero ya no funciona. La fecha de creación se parece a: 2018-06-07T22:54:07.310Z .
Usar moment(date here).format() funciona bien.
Incluya los valores de todas las variables utilizadas.
La fecha que uso para formatear y usar desde Ahora es 2018-06-07T22:54:07.310Z
Medio ambiente:
Bot de discordia
Ejemplos: Chrome 49 en OSX, Internet Explorer 10 en Windows 7, Node.JS 4.4.4 en Ubuntu 16.0.4
No utilizo el momento para nada mencionado anteriormente.
Tanto el navegador como el sistema operativo son importantes para nosotros, especialmente si tiene un entorno inusual como una aplicación IOT.

Otra información que puede ser de ayuda: https://i.imgur.com/4LFsZh3.png

  • La configuración de la zona horaria de la máquina en la que se ejecuta el código: PST
  • La hora y fecha en que se ejecutó el código: 12:20 p.m., 7/10/18
  • Otras bibliotecas en uso (TypeScript, Immutable.js, etc.) Ninguna

Si informa un problema, ejecute el siguiente código en el entorno que está utilizando e incluya el resultado:

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

07 de octubre de 2018 12:29:05 GMT-0700 (hora de verano del Pacífico)
2018-10-7 12:29:05
420
2.22.2
Asegúrese de que su problema esté aislado al momento.

Bug

Comentario más útil

Gracias por la respuesta. Estoy usando NodeJS, por lo que no hay un entorno de navegador.

nueva fecha ()). toString () Jue 17 de enero de 2019 06:53:11 GMT-0600 (hora estándar central)
nueva fecha ()). toLocaleString (): 1/17/2019, 6:53:11 a.m.
nueva Fecha ()). getTimezoneOffset (): 360
moment.version: 2.23.0
NodeJS es v11.6.0

He estado haciendo algunas pruebas y el conflicto es un constructor 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 comentarios

¿Cómo ejecuta su Discord Bot?

Dijiste: _ "Esto funcionó antes pero ya no funciona" _
¿Ha cambiado algo desde que funcionó? Por ejemplo, ¿ha actualizado el entorno en el que se ejecuta su bot de discordia? ¿Ha cambiado el formato de 'fecha de creación de la cuenta de usuario'?

¿Puede modificar el código de su bot de discordia para mostrar el resultado de lo siguiente (específicamente usando cadenas codificadas):

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

Estaba funcionando antes de que simplemente se detuviera. Ningún código cambiado. Ningún entorno cambió con el bot. La forma en que se analizan las fechas también parece la misma.

Y esto es lo que produjo la consola;

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

y así es como lo usé ( this.client.moment es cómo he definido el 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());

No estoy seguro de si lo mencioné o no, pero aquí están las versiones actuales que estoy usando:
"momento": "^ 2.22.2",
"formato-duración-momento": "^ 2.2.2"
y estoy en la v8.9.2 del nodo

Tengo un problema similar con Angular 6 (aplicación basada en iones) y el momento 2.22.2 devuelve una fecha no válida para algo tan simple como esto.
moment(new Date()).fromNow();
por favor avise.

Sigue sucediendo en 2.23.0

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

Gracias por abrir esta solicitud.
¡Hola! ¡Gracias por presentar este problema! Desafortunadamente, no puedo reproducir esto. ¿Podría proporcionarnos alguna otra información?

Ayuda si ejecuta estas líneas en sus 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)

Gracias por la respuesta. Estoy usando NodeJS, por lo que no hay un entorno de navegador.

nueva fecha ()). toString () Jue 17 de enero de 2019 06:53:11 GMT-0600 (hora estándar central)
nueva fecha ()). toLocaleString (): 1/17/2019, 6:53:11 a.m.
nueva Fecha ()). getTimezoneOffset (): 360
moment.version: 2.23.0
NodeJS es v11.6.0

He estado haciendo algunas pruebas y el conflicto es un constructor 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

También me afecta esto.
Al principio, creí que el uso de una marca de tiempo Unix incompleta (cómo se me proporcionan los datos) en el constructor era la causa, pero al probar el código de ejemplo en la documentación de MomentJS, encontré que cualquier llamada a fromNow() devuelto Invalid Date .

El mismo 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

Lo mismo aquí en "moment": "^2.24.0", . Funciona bien cuando se ejecuta en el navegador pero falla en nodejs. ¿Alguna solución hasta que se solucione? @marwahaha

Es un truco, pero puedes cambiar las extensiones Object.prototype para que no sean enumerables:

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'
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

benhathaway picture benhathaway  ·  3Comentarios

RobinvanderVliet picture RobinvanderVliet  ·  3Comentarios

Delgan picture Delgan  ·  3Comentarios

danieljsinclair picture danieljsinclair  ·  3Comentarios

IbraheemAlSaady picture IbraheemAlSaady  ·  3Comentarios