Avviso di deprecazione in Moment.js - Non in un formato ISO riconosciuto


176

Ricevo un avviso che un valore fornito al momento non è in un formato ISO riconosciuto. Ho cambiato la mia variabile oggi con la funzione moment e ancora non funziona.

Ecco l'errore di avviso:

Avviso di deprecazione: il valore fornito non è in un formato ISO riconosciuto. momento la costruzione ricade su js Date (), che non è affidabile su tutti i browser e le versioni. I formati di data non ISO sono sconsigliati e verranno rimossi in una delle prossime versioni principali. Per ulteriori informazioni, consultare http://momentjs.com/guides/#/warnings/js-date/ . Argomenti: [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [oggetto 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);
});

1
Penso che l'avvertimento si riferisca a '2016-9-26 19:30'tale non essendo un formato ISO riconosciuto
Jaromanda X

qual è l'errore sul formato? quindi devo aggiungere 0?
Jemai,

1
Puoi fare moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');secondo la documentazione ... questo accetterà mesi e giorni a 1 o 2 cifre, ore a 1 o 2 cifre nel formato 24 ore
Jaromanda X

2
L'errore è che il formato che stai fornendo non è un formato ISO riconosciuto ... o fornire un formato ISO riconosciuto o fornire una stringa che "accenni" al formato previsto
Jaromanda X

Okay grazie che ne dite di aggiungere anche questo formato? var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Jemai,

Risposte:


180

Dai un'occhiata a tutta la loro fantastica documentazione!

Qui è dove discutono il messaggio di avviso .

String + Format

Avviso: il supporto del browser per l'analisi delle stringhe è incoerente. Poiché non esiste alcuna specifica su quali formati devono essere supportati, ciò che funziona in alcuni browser non funzionerà in altri browser.

Per risultati coerenti analizzando qualsiasi cosa diversa dalle stringhe ISO 8601, è necessario utilizzare String + Format .

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

String + Formats (più formati)

Se hai più di un formato, dai un'occhiata ai loro formati String + (con una 's').

Se non conosci il formato esatto di una stringa di input, ma sai che potrebbe essere uno dei tanti, puoi usare una serie di formati.

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

Si prega di controllare la documentazione per qualcosa di più specifico.

Fuso orario

Acquista Parsing in Zone , la documentazione equivalente per i fusi orari.

Il costruttore moment.tz accetta tutti gli stessi argomenti del costruttore moment, ma usa l'ultimo argomento come identificatore del fuso orario.

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

MODIFICARE

//...
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);
}
//...

89
Invece di copiare e incollare la documentazione, si prega di fornire una risposta effettiva.
Rebs,

3
questo è ciò che mi ha aiutato a mettere il formato in "input" - momento ("12-25-1995", ["MM-GG-AAAA", "AAAA-MM-GG"]);
Demodave,

2
@Rebs Penso di aver aggiunto molta documentazione perché la soluzione generale non è semplice. Ovviamente la soluzione specifica per Jemai avrebbe dovuto essere la risposta e l'ho aggiunta da allora (grazie a te!) Ma la prima è la ragione per cui c'è così tanta documentazione qui.
christo8989,

Grazie, e se volessi semplicemente una data semplice senza questo pesante quadro di formulazione, possiamo semplicemente ignorare questo avviso forse?
Webwoman il

questo mi ha aiutato -> momento ("12-25-1995", ["MM-GG-AAAA", "AAAA-MM-GG"]);
Cesar Rodriguez T

50

Fare questo funziona per me:

moment(new Date("27/04/2016")).format

5
Questo è il modo più semplice per evitare l'inquinamento da console
Josey,

2
Non consiglierei questo approccio per chiunque abbia a che fare con il supporto IE in alcun modo. I risultati sono molto traballanti specialmente su IE 11.
Ajm113

1
Questa è la risposta più semplice e accurata. Grazie mi ha aiutato.
Tahir Afridi

15

Ho riscontrato questo errore perché stavo cercando di passare una data da localStorage. Passare la data in un nuovo Dateoggetto e quindi chiamare .toISOString () ha fatto il trucco per me:

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

Ciò ha eliminato tutti gli avvisi nella console.


Questo sopprimerà l'avvertimento, ma il rovescio della medaglia è se sei specifico del fuso orario, quindi non suggerirei questo: perché convertirebbe la data in UTC come stiamo dicendo '.toISOString ()'. Prova "moment (new Date (" 27/04/2016 ")). Format" come indicato da un'altra risposta - che manterrebbe il tempo in locale ..
whoami

15

usa il momento nella tua funzione in questo modo

 moment(new Date(date)).format('MM/DD/YYYY')

Questa è la risposta breve che stai cercando se vuoi semplicemente sbarazzarti dell '"avviso deprezzato"
VictorC

6

Questa risposta è per comprendere meglio questo avvertimento

Warning deprecazione è causato quando si utilizza momento per creare l'oggetto di tempo, var today = moment();.

Se questo avviso ti va bene, allora ho un metodo più semplice.

Non utilizzare invece l' dateoggetto jsdall'uso moment. Ad esempio, utilizzare moment()per ottenere la data corrente.

Oppure converti l' jsoggetto momentdata in data. Puoi semplicemente farlo specificando il formato jsdell'oggetto data.

vale a dire, moment("js date", "js date format");

per esempio:

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

(MA PUOI UTILIZZARE SOLO QUESTO METODO FINO A CHE È DEPRECIATO, questo potrebbe essere ammortizzato momentin futuro)


6
Sul serio! la domanda su come rimuovere questo avviso di deprecazione! non chiedendo come usare questa deprecazione! inoltre, è "questo verrà rimosso in futuro" non "questo potrebbe essere ammortizzato dal momento in futuro" è già deprecato!
Al-Mothafar,

@ Al-Mothafar, ho un piccolo dubbio, perché sei andato oltre quando la ifcondizione è fallita. Si dovrebbe uscire dalla risposta non procedere.
Saahithyan Vigneswaran,

2
Grazie, questa è la risposta che mi ha davvero mostrato cosa posso sapere qui.
DigitalDesignDj,

3

Puoi usare

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

Questo dovrebbe essere usato quando la data non è in formato ISO in quanto dirà al momento quale sia il nostro formato attuale.


1
Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo riguardo a come e / o perché risolve il problema migliorerebbe il valore a lungo termine della risposta.
leopale il

@leopal ha apportato alcune modifiche!
BeaST 30

2

String di analisi con moment.js.

const date = '1231231231231' //Example String date
const parsed = moment(+date);

Questo mi aiuta a sbarazzarmi dell'avvertimento di deprecazione quando stavo cercando di usare il formato unix per ottenere il numero della settimana.
curious.netter il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.