Verfallswarnung in Moment.js - Nicht in einem anerkannten ISO-Format


175

Ich erhalte eine Warnung, dass ein momentan angegebener Wert nicht in einem anerkannten ISO-Format vorliegt. Ich habe meine Variable heute mit der Moment-Funktion geändert und es funktioniert immer noch nicht.

Hier ist der Warnfehler:

Verfallswarnung: Der angegebene Wert hat kein anerkanntes ISO-Format. Moment Konstruktion fällt auf js Date () zurück, was nicht für alle Browser und Versionen zuverlässig ist. Nicht-ISO-Datumsformate werden nicht empfohlen und werden in einer kommenden Hauptversion entfernt. Weitere Informationen finden Sie unter http://momentjs.com/guides/#/warnings/js-date/ . Argumente: [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);
});

1
Ich denke, die Warnung bezieht sich auf '2016-9-26 19:30'und dies ist kein anerkanntes ISO-Format
Jaromanda X

Was ist der Fehler im Format? Muss ich also 0 hinzufügen?
Jemai

1
Sie können dies moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');gemäß der Dokumentation tun ... dies akzeptiert 1 oder 2-stellige Monate und Tage, 1 oder 2-stellige Stunden im 24-Stunden-Format
Jaromanda X

2
Der Fehler ist, dass das von Ihnen
bereitgestellte

Okay, danke, wie wäre es mit diesem kann ich dieses Format auch hinzufügen? var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Jemai

Antworten:


180

Schauen Sie sich all ihre fantastischen Dokumentationen an!

Hier diskutieren sie die Warnmeldung .

String + Format

Warnung: Die Browserunterstützung für das Parsen von Zeichenfolgen ist inkonsistent. Da es keine Spezifikation gibt, welche Formate unterstützt werden sollen, funktioniert das, was in einigen Browsern funktioniert, in anderen Browsern nicht.

Für konsistente Ergebnisse beim Parsen anderer Zeichenfolgen als ISO 8601 sollten Sie Zeichenfolge + Format verwenden .

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

String + Formate (mehrere Formate)

Wenn Sie mehr als ein Format haben, überprüfen Sie deren String + Formate (mit einem 's').

Wenn Sie das genaue Format einer Eingabezeichenfolge nicht kennen, aber wissen, dass es eines von vielen sein kann, können Sie eine Reihe von Formaten verwenden.

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

Bitte überprüfen Sie die Dokumentation für weitere Einzelheiten.

Zeitzone

Checkout Parsing in Zone , die entsprechende Dokumentation für Zeitzonen.

Der moment.tz-Konstruktor verwendet dieselben Argumente wie der moment-Konstruktor, verwendet jedoch das letzte Argument als Zeitzonen-ID.

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

BEARBEITEN

//...
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
Anstatt die Dokumentation zu kopieren und einzufügen, geben Sie bitte eine tatsächliche Antwort.
Rebs

2
Dies hat mir geholfen, das Format auf "Eingabe" zu setzen - Moment ("25.12.1995", ["MM-TT-JJJJ", "JJJJ-MM-TT");
Demodave

2
@Rebs Ich glaube, ich habe viel Dokumentation hinzugefügt, weil die allgemeine Lösung nicht einfach ist. Natürlich hätte die spezifische Lösung für Jemai in der Antwort sein sollen, und ich habe sie seitdem hinzugefügt (danke!), Aber die erstere ist der Grund, warum es hier so viel Dokumentation gibt.
christo8989

Vielen Dank, aber was ist, wenn Sie nur ein einfaches Datum ohne dieses umfangreiche Formatierungsframework wünschen, können wir diese Warnung möglicherweise einfach ignorieren?
Webwoman

das hat mir geholfen -> Moment ("25.12.1995", ["MM-TT-JJJJ", "JJJJ-MM-TT"]);
Cesar Rodriguez T

50

Das zu tun funktioniert für mich:

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

5
Dies ist die einfachste Lösung, um die Verschmutzung der Konsole zu vermeiden
Josey

2
Ich würde diesen Ansatz niemandem empfehlen, der sich in irgendeiner Weise mit IE-Unterstützung befassen muss. Die Ergebnisse sind besonders auf IE 11 sehr schuppig.
Ajm113

1
Dies ist die einfachste und genaueste Antwort. Danke, es hat mir geholfen.
Tahir Afridi

15

Ich bin auf diesen Fehler gestoßen, weil ich versucht habe, ein Datum von zu übergeben localStorage. Das Datum in ein neues DateObjekt zu übergeben und dann .toISOString () aufzurufen, hat den Trick für mich getan:

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

Dadurch wurden alle Warnungen in der Konsole unterdrückt.


Dies wird die Warnung unterdrücken, aber der Nachteil ist, wenn Sie spezifisch für die Zeitzone sind, dann würde ich dies nicht vorschlagen: weil es das angegebene Datum in UTC konvertieren würde, wie wir '.toISOString ()' sagen. Versuchen Sie "Moment (neues Datum (" 27/04/2016 ")). Format", wie aus einer anderen Antwort hervorgeht - was die Zeit in der Region halten würde ..
whoami

15

Verwenden Sie den Moment in Ihrer Funktion so

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

Dies ist die kurze Antwort, nach der Sie suchen, wenn Sie nur die "abgewertete Warnung" loswerden möchten
VictorC

6

Diese Antwort soll ein besseres Verständnis dieser Warnung vermitteln

Eine Verfallswarnung wird verursacht, wenn Sie den Moment zum Erstellen eines Zeitobjekts verwenden var today = moment();.

Wenn diese Warnung für Sie in Ordnung ist, habe ich eine einfachere Methode.

Verwenden Sie stattdessen kein dateObjekt aus der jsVerwendung moment. Verwenden Sie moment()zum Beispiel , um das aktuelle Datum abzurufen.

Oder konvertieren Sie das jsDatumsobjekt in momentDatum. Sie können dies einfach tun, indem Sie das Format Ihres jsDatumsobjekts angeben.

dh moment("js date", "js date format");

z.B:

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

(ABER SIE KÖNNEN DIESE METHODE NUR VERWENDEN, BIS SIE VERRINGERT IST. Dies kann in Zukunft abgeschrieben momentwerden.)


6
Ernsthaft! die Frage, wie diese Verfallswarnung entfernt werden kann! nicht fragen, wie man diese Abwertung benutzt! es ist auch "dies wird in Zukunft entfernt" nicht "dies kann ab dem Moment in der Zukunft abgeschrieben werden" es ist bereits veraltet!
Al-Mothafar

@ Al-Mothafar, ich habe einen kleinen Zweifel, warum bist du darüber hinaus gegangen, als der ifZustand fehlgeschlagen ist. Sie sollten die Antwort beenden und nicht fortfahren.
Saahithyan Vigneswaran

2
Danke, das ist die Antwort, die mir wirklich gezeigt hat, was ich hier wissen kann.
DigitalDesignDj

3

Sie können verwenden

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

Dies sollte verwendet werden, wenn das Datum nicht das ISO-Format ist, da es sofort anzeigt, wie unser aktuelles Format ist.


1
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern.
Leopal

@leopal hat einige Änderungen vorgenommen!
BeaST 30

2

String mit moment.js analysieren.

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

Dies hilft mir, die Warnung vor Verfall loszuwerden, als ich versuchte, das Unix-Format zu verwenden, um die Wochennummer zu erhalten.
neugierig.netter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.