Moment: Aumento de error de conversión de fecha de Momemtjs.

Creado en 8 oct. 2016  ·  18Comentarios  ·  Fuente: moment/moment

Descripción del problema y pasos para reproducir:
console.log('>>>>>>.', moment(value).format('MM-DD-YYYY'),moment(value).format('YYYY-MM-DD'));

No estoy seguro de dónde se generó este error, no se puede rastrear. Había agregado un mensaje de advertencia.

Ambiente:
Ubuntu, navegador Chrome.

LLEGAR POR DEBAJO DEL PROBLEMA

Advertencia de obsolescencia: el valor proporcionado no está en un formato ISO reconocido. la construcción de momentos recurre a js Date(), que no es confiable en todos los navegadores y versiones. Se desaconsejan los formatos de fecha que no son ISO y se eliminarán en una próxima versión principal. Consulte http://momentjs.com/guides/#/warnings/js -date/ para obtener más información.
Argumentos:
[0] _isAMomentObject: verdadero, _isUTC: falso, _useUTC: falso, _l: indefinido, _i: 27/04/2016, _f: indefinido, _strict: indefinido, _locale: [objeto Objeto]
Error

Comentario más útil

Hacer moment(new Date("27/04/2016")).format.... parece funcionar. Pero creo que hay algunos problemas en este enfoque, tal vez relacionados con los lugares, etc.

Todos 18 comentarios

Este mensaje de advertencia aparece cuando crea un momento a partir de una cadena que no tiene un formato compatible con ISO 8601 (consulte http://momentjs.com/docs/#/parsing/string/ para obtener una lista de formatos compatibles).

En este caso, parece que intentó analizar la cadena 27/04/2016 , que no es un formato ISO. Puede analizar este formato sin una advertencia si le dice a Moment cuál es el formato: moment("27/04/2016", "DD/MM/2016") . Alternativamente, puede cambiar el formato de su entrada para que coincida con la especificación ISO: moment("2016-04-27")

Estoy cerrando este problema ya que no es un error en Moment, pero si todavía tienes preguntas, mencióname en una respuesta aquí e intentaré ayudarte.

No tengo éxito cuando hago un formato ISO 8601 compatible

Hacer moment(new Date("27/04/2016")).format.... parece funcionar. Pero creo que hay algunos problemas en este enfoque, tal vez relacionados con los lugares, etc.

@ziaulrehmandevsinc Trabajó para mí. Gracias.

@ziaulrehmandevsinc También funcionó para mí, gracias

@ziaulrehmandevsinc También funcionó para mí. Muchas gracias

Trabajó para mi. Gracias

Por el momento, preferiríamos no ajustar el código para manejar este problema. Dentro de moment.js donde muestra la advertencia:

función de advertencia (mensaje) {
if (hooks.suppressDeprecationWarnings === false &&
(tipo de consola !== 'indefinido') && consola.advertencia) {
console.warn('Advertencia de obsolescencia: ' + mensaje);
}

¿Cómo se configura "hooks.suppressDeprecationWarnings"? Revisé la función de ganchos pero informa que los ganchos no son una función. usando aurelio.

Gracias

@pdesimone

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

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

Sí, tengo este problema usando moment('2018-01-20') que, por lo que sé, es un formato ISO 8601 válido.

En ese momento, no pude lograr que supressDepreciationWarnings u otras soluciones funcionaran.

He hecho esto en todos mis usos de momento:

momento (valor, formato), es decir: Valor: 2018-01-20, Formato: AAAA-MM-DD.

Entonces la advertencia no sucede. Aparentemente, si dejas que moment "pruebe" y averiguas el tipo de fecha, recibes la advertencia...

@ ziaulrehman40 funcionó para mí, muchas gracias

Si cree que está manejando las cosas correctamente y aún ve el error, verifique dos veces sus tipos de entrada <input type="date" /> arrojará un error pero <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')));

Gracias: funciona bien, pero necesito saber si causará algún problema al agregar las advertencias de eliminación de desuso

Gracias, @ziaulrehman40 - :kissing_heart:

En lugar de suprimir las advertencias, convierta el objeto de fecha en una cadena ISO antes de formatearlo usando el momento

 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);

Pruébelo en Repl.it

Yo también estoy teniendo problemas con esto.

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");

El registro de la consola devuelve true , pero aparece el mensaje de error:

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]

Un console.log en la fecha en que lo recibo devuelve 2020-05-21 19:43:58.099745+00 .
¿Alguna sugerencia?

@kiocosta Lamento que estés teniendo problemas. Probablemente debería analizar con un formato. https://momentjs.com/docs/#/parsing/string -format/ También podría ser una buena pregunta para Stack Overflow .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

vbullinger picture vbullinger  ·  3Comentarios

ninigix picture ninigix  ·  3Comentarios

benhathaway picture benhathaway  ·  3Comentarios

BCup picture BCup  ·  3Comentarios

ghost picture ghost  ·  3Comentarios