Advertencia de desuso en Moment.js: no en un formato ISO reconocido

176

Recibo una advertencia de que un valor proporcionado hasta el momento no está en un formato ISO reconocido. Cambié mi variable hoy con la función moment y aún no funciona.

Aquí está el error de advertencia:

Advertencia de desuso: el valor proporcionado no está en un formato ISO reconocido. la construcción de momento se remonta a js Date (), que no es confiable en todos los navegadores y versiones. Se desaconsejan los formatos de fecha no 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: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object Object]

var entryDate = new Date();
var currentDate = entryDate.getDate();

function between(x, min, max) {
  return x.valueOf() >= min.valueOf() && x < max.valueOf();
}

$('#custom1').change(function () {
  if ($('#custom1 :selected').val() == 'AU') {
    var keyword = '';

    var aus1_s = moment.tz('2016-9-26 19:30', 'Australia/Sydney');
    var aus2_s = moment.tz('2016-10-2 19:30', 'Australia/Sydney');
    var aus3_s = moment.tz('2016-10-9 19:30', 'Australia/Sydney');
    var aus4_s = moment.tz('2016-10-16 19:30', 'Australia/Sydney');
    var aus5_s = moment.tz('2016-10-23 19:30', 'Australia/Sydney');
    var aus6_s = moment.tz('2016-10-30 19:30', 'Australia/Sydney');
    var aus6_e = moment.tz('2016-11-5 19:30', 'Australia/Sydney');
  } else if ($('#custom1 :selected').val() == 'NZ') {
    var aus1_s = moment.tz('2016-9-28 20:30', 'Pacific/Auckland');
    var aus2_s = moment.tz('2016-10-4 20:30', 'Pacific/Auckland');
    var aus3_s = moment.tz('2016-10-11 20:30', 'Pacific/Auckland');
    var aus4_s = moment.tz('2016-10-18 20:30', 'Pacific/Auckland');
    var aus5_s = moment.tz('2016-10-25 20:30', 'Pacific/Auckland');
    var aus6_s = moment.tz('2016-11-2 20:30', 'Pacific/Auckland');
    var aus6_e = moment.tz('2016-11-9 20:30', 'Pacific/Auckland');
  } else {
    $('#entryEquals').val('');
    return false;
  }

  var today = moment();

  switch (true) {
    case between(today, aus1_s, aus2_s):
      keyword = 'RElYT04=';
      break;

    case between(today, aus2_s, aus3_s):
      keyword = 'QlJJREU=';
      break;

    case between(today, aus3_s, aus4_s):
      keyword = 'U1lETkVZ';
      break;

    case between(today, aus4_s, aus5_s):
      keyword = 'R1JPT00=';
      break;

    case between(today, aus5_s, aus6_s):
      keyword = 'V0VERElORw==';
      break;

    case between(today, aus6_s, aus6_e):
      keyword = 'VExD';
      break;

    default:
      $('#entryEquals').val('');
      break;
  }

  $('#entryEquals').val(keyword);
});
Jemai
fuente
1
Creo que la advertencia se refiere '2016-9-26 19:30'y no es un formato ISO reconocido
Jaromanda X
¿Cuál es el error en el formato? Entonces, ¿necesito agregar 0?
Jemai
1
Puede hacerlo de moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');acuerdo con la documentación ... esto aceptará meses y días de 1 o 2 dígitos, horas de 1 o 2 dígitos en formato de 24 horas
Jaromanda X
2
El error es que el formato que está suministrando no es un formato ISO reconocido ... ya sea que proporcione un formato ISO reconocido o proporcione una cadena que "insinúe" el formato esperado
Jaromanda X
Bien, gracias, ¿qué tal este? ¿Puedo agregar este formato también? var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Jemai

Respuestas:

180

¡Mira toda su impresionante documentación!

Aquí es donde discuten el mensaje de advertencia .

Cadena + Formato

Advertencia: El soporte del navegador para analizar cadenas es inconsistente. Debido a que no hay una especificación sobre qué formatos deben ser compatibles, lo que funciona en algunos navegadores no funcionará en otros navegadores.

Para obtener resultados consistentes de análisis sintáctico que no sea ISO 8601 cuerdas nada, se debe utilizar cuerdas + Formato .

moment("12-25-1995", "MM-DD-YYYY");

Cadena + Formatos (múltiples formatos)

Si tiene más de un formato, consulte sus Formatos de cadena + (con una 's').

Si no conoce el formato exacto de una cadena de entrada, pero sabe que podría ser uno de muchos, puede usar una variedad de formatos.

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);

Por favor revise la documentación para algo más específico.

Zona horaria

Checkout Parsing in Zone , la documentación equivalente para zonas horarias.

El constructor moment.tz toma los mismos argumentos que el constructor momento, pero usa el último argumento como identificador de zona horaria.

var b = moment.tz("May 12th 2014 8PM", "MMM Do YYYY hA", "America/Toronto");

EDITAR

//...
var dateFormat = "YYYY-M-D H:m"; //<-------- This part will get rid of the warning.
var aus1_s, aus2_s, aus3_s, aus4_s, aus5_s, aus6_s, aus6_e;
if ($("#custom1 :selected").val() == "AU" ) {
    var region = 'Australia/Sydney';

    aus1_s = moment.tz('2016-9-26 19:30', dateFormat, region);              
    aus2_s = moment.tz('2016-10-2 19:30', dateFormat, region);              
    aus3_s = moment.tz('2016-10-9 19:30', dateFormat, region);                  
    aus4_s = moment.tz('2016-10-16 19:30', dateFormat, region);                 
    aus5_s = moment.tz('2016-10-23 19:30', dateFormat, region);
    aus6_s = moment.tz('2016-10-30 19:30', dateFormat, region);
    aus6_e = moment.tz('2016-11-5 19:30', dateFormat, region);
} else if ($("#custom1 :selected").val() == "NZ" ) {
    var region = 'Pacific/Auckland';

    aus1_s =  moment.tz('2016-9-28 20:30', dateFormat, region);
    aus2_s =  moment.tz('2016-10-4 20:30', dateFormat, region);
    aus3_s =  moment.tz('2016-10-11 20:30', dateFormat, region);
    aus4_s =  moment.tz('2016-10-18 20:30', dateFormat, region);
    aus5_s =  moment.tz('2016-10-25 20:30', dateFormat, region);
    aus6_s =  moment.tz('2016-11-2 20:30', dateFormat, region);
    aus6_e =  moment.tz('2016-11-9 20:30', dateFormat, region);
}
//...
christo8989
fuente
89
En lugar de copiar y pegar documentación, proporcione una respuesta real.
Rebs
3
esto es lo que me ayudó a poner el formato a "entrada" - momento ("25/12/1995", ["MM-DD-AAAA", "AAAA-MM-DD"]);
Demodave el
2
@Rebs Creo que agregué mucha documentación porque la solución general no es sencilla. Obviamente, la solución específica para Jemai debería haber estado en la respuesta y la he agregado desde entonces (¡gracias a usted!), Pero la primera es la razón por la que hay tanta documentación aquí.
christo8989
Gracias, pero ¿y si solo quieres una fecha simple sin este marco de formato pesado, tal vez podamos ignorar esta advertencia?
Webwoman
esto me ayudó -> momento ("25/12/1995", ["MM-DD-AAAA", "AAAA-MM-DD"]);
Cesar Rodriguez T
50

Hacer esto funciona para mí:

moment(new Date("27/04/2016")).format
Jigar Bhatt
fuente
55
Este es el trabajo más simple para evitar la contaminación de la consola
Josey
2
No recomendaría este enfoque a nadie que tenga que lidiar con el soporte de IE en ningún grado. Los resultados son muy escamosos, especialmente en IE 11.
Ajm113
1
Esta es la respuesta más simple y precisa. Gracias me ayudó.
Tahir Afridi
15

Me encontré con este error porque estaba tratando de pasar una fecha de localStorage. Pasar la fecha a un nuevo Dateobjeto y luego llamar a .toISOString () me ayudó:

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());

Esto suprimió cualquier advertencia en la consola.

Shahzeb Khan
fuente
Esto suprimirá la advertencia, pero la desventaja es que si eres específico de la zona horaria, entonces no sugeriría esto: porque convertiría la fecha dada a UTC como decimos '.toISOString ()'. Pruebe el formato "moment (new Date (" 27/04/2016 "))" como se indica en otra respuesta, que mantendría la hora en local ..
whoami
15

usa el momento en tu función así

 moment(new Date(date)).format('MM/DD/YYYY')
MARYLAND. ABU TALHA
fuente
Esta es la respuesta corta que está buscando si solo quiere deshacerse de la "advertencia depreciada"
VictorC
6

Esta respuesta es para comprender mejor esta advertencia.

Deprecation advertencia se produce cuando se utiliza momento para crear el objeto de tiempo, var today = moment();.

Si esta advertencia está bien con usted, entonces tengo un método más simple.

No use el dateobjeto del jsuso momenten su lugar. Por ejemplo, use moment()para obtener la fecha actual.

O convierta el jsobjeto de momentfecha a fecha. Simplemente puede hacer eso especificando el formato de su jsobjeto de fecha.

es decir, moment("js date", "js date format");

p.ej:

moment("2014 04 25", "YYYY MM DD");

(PERO SOLO PUEDE USAR ESTE MÉTODO HASTA QUE SE DEPRECIE, esto puede ser depreciado momenten el futuro)

Saahithyan Vigneswaran
fuente
66
¡Seriamente! ¡La pregunta sobre cómo eliminar esta advertencia de desaprobación! no preguntando cómo usar esta desaprobación! además, es "esto se eliminará en el futuro", no "esto puede ser depreciado desde el momento en el futuro" ¡ya está en desuso!
Al-Mothafar
@ Al-Mothafar, tengo una pequeña duda, ¿por qué fuiste más allá cuando la ifcondición falló? Debe salir de la respuesta, no continuar.
Saahithyan Vigneswaran
2
Gracias, esta es la respuesta que realmente me mostró lo que puedo saber aquí.
DigitalDesignDj
3

Puedes usar

moment(date,"currentFormat").format("requiredFormat");

Esto debe usarse cuando la fecha no es el formato ISO, ya que le dirá al momento cuál es nuestro formato actual.

BeaST 30
fuente
1
Si bien este código puede responder la pregunta, proporcionar un contexto adicional con respecto a cómo y / o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
leopal
@leopal hizo algunos cambios!
BeaST 30 de
2

Analizando cadena con moment.js.

const date = '1231231231231' //Example String date
const parsed = moment(+date);
Коля Ракета
fuente
Esto me ayudó a deshacerme de la advertencia de desaprobación cuando intentaba usar el formato Unix para obtener el número de semana.
curious.netter