Estoy usando el siguiente código para convertir una fecha-hora del lado del servidor a la hora local usando moment.js.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Pero estoy obteniendo:
Advertencia de desaprobación: momento en que la construcción vuelve a la fecha js Esto se desaconseja y se eliminará en el próximo lanzamiento principal. Consulte https://github.com/moment/moment/issues/1407 para obtener más información.
¡Parece que no puedo deshacerme de él! ¿Cómo puedo arreglarlo?
javascript
date
momentjs
dariush
fuente
fuente
Respuestas:
Para deshacerse de la advertencia, debe:
Pase una versión con formato ISO de su cadena de fecha:
moment('2014-04-23T09:54:51');
Pase la cadena que tiene ahora, pero dígale a Moment en qué formato está la cadena:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
Convierta su cadena en un objeto Fecha de JavaScript y luego páselo a Momento:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
La última opción es un respaldo integrado que Moment admite por ahora, con la advertencia de consola obsoleta. Dicen que no admitirán este respaldo en futuras versiones. Explican que usar
new Date('my date')
es demasiado impredecible.fuente
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());
ok? ¿O simplemente estoy suprimiendo un problema listo para bloquearse silenciosamente en un futuro cercano como este?Invalid
resultado de fecha.Como alternativa, puede suprimir la visualización de la advertencia de desuso configurando
moment.suppressDeprecationWarnings = true;
fuente
// @ts-ignore
(al menos para algunas versiones de moment-timezone y @ types / moment-timezone).La construcción de la fecha en
moment
internamente usa elnew Date()
en el javascript. Lanew Date()
construcción reconoce la cadena de fecha en formatos RFC2822 o ISO en todos los navegadores. Cuando se construye unmoment
objeto con fecha que no está en estos formatos, se emite la advertencia de desaprobación.Aunque se lanzan advertencias de desaprobación, para algunos formatos, el
moment
objeto se construirá con éxito en Chrome, pero no en Firefox o Safari. Debido a esto, procesar la fecha en Chrome puede dar resultados como se esperaba (no todo el tiempo) y arrojarInvalid Date
otros.Considere,
02.02.2018
,Cromo -
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
Por lo tanto,
moment.js
se usa bajo su propio riesgo en caso de que no se usen los formatos recomendados / estándar.Para suprimir las advertencias de desaprobación ,
moment
construcción.Ejemplo:
moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Ejemplo:
moment("2018-02-01T18:30:00.000Z")
- Formato ISOmoment("Thu, 01 Feb 2018 18:30:00 GMT")
- Formato RFC2822 - Formato en Githubmoment.suppressDeprecationWarnings = true;
Sugiero sobrescribir la reserva de entrada en el momento.
Como (3) suprimirá todas las advertencias, (4) suprimirá solo el retroceso de construcción de la fecha. Usando (4), obtendrá a
Invalid Date
medida quenew Date()
se usa el interno y se pueden ver otras depreciaciones en la consola, por lo que se puede actualizar el momento o se pueden reemplazar los métodos en desuso en la aplicación.fuente
Si su fecha se le pasa desde una API como
string
(como mi problema), puede usar un filtro para convertir la cadena en una fecha por el momento. Esto se encargará del momento de advertencia de construcción.Agréguelo a la vista:
fuente
Como se indica en las respuestas anteriores. Proporcionar el formato de fecha debería funcionar.
¿Por qué recibiría el mensaje de desaprobación con la siguiente línea de código? Pensé que el formato String + debía solucionar el problema.
moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
. Además, por favor no, no tengo control sobre el formato de fecha que se proporciona. Sé que puedo convertirlo yo mismo,'YYYY-MM-DDTHH:mm:ss'
entonces el momento no muestra el mensaje de desaprobación. Sin embargo, de acuerdo con la documentación, la línea de código debería funcionar. Aquí está el mensaje de desaprobación que estoy viendo.fuente