Ich verwende den folgenden Code, um eine serverseitige Datums- und Uhrzeitangabe mit moment.js in die Ortszeit umzuwandeln.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Aber ich bekomme:
Verfallswarnung: Moment Bau fällt auf js Datum zurück. Dies wird nicht empfohlen und wird in der kommenden Hauptversion entfernt. Weitere Informationen finden Sie unter https://github.com/moment/moment/issues/1407 .
Es scheint, ich kann es nicht loswerden! Wie kann ich es reparieren?
javascript
date
momentjs
Dariush
quelle
quelle
Antworten:
Um die Warnung loszuwerden, müssen Sie entweder:
Übergeben Sie eine ISO-formatierte Version Ihrer Datumszeichenfolge:
moment('2014-04-23T09:54:51');
Übergeben Sie die Zeichenfolge, die Sie jetzt haben, und teilen Sie Moment mit, in welchem Format die Zeichenfolge vorliegt:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
Konvertieren Sie Ihre Zeichenfolge in ein JavaScript-Datumsobjekt und übergeben Sie diese an Moment:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
Die letzte Option ist ein integrierter Fallback, den Moment derzeit mit der veralteten Konsolenwarnung unterstützt. Sie sagen, dass sie diesen Fallback in zukünftigen Versionen nicht unterstützen werden. Sie erklären, dass die Verwendung
new Date('my date')
zu unvorhersehbar ist.quelle
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());
Ordnung? Oder unterdrücke ich nur ein Problem, das in naher Zukunft lautlos zum Absturz gebracht werden kann?Invalid
Datum Ergebnis.Alternativ können Sie das Anzeigen der Verfallswarnung durch Einstellen unterdrücken
moment.suppressDeprecationWarnings = true;
quelle
// @ts-ignore
(zumindest für einige Versionen von moment-timezone und @ types / moment-timezone).Die Datumskonstruktion in verwendet
moment
intern dasnew Date()
im Javascript. Dienew Date()
Konstruktion erkennt die Datumszeichenfolge in allen Browsern entweder im RFC2822- oder im ISO- Format. Wenn Sie einmoment
Objekt mit einem Datum erstellen, das nicht in diesen Formaten vorliegt, wird die Verfallswarnung ausgegeben.Obwohl die Verfallswarnungen ausgegeben werden, wird das
moment
Objekt für einige Formate erfolgreich in Chrome erstellt, jedoch nicht in Firefox oder Safari. Aus diesem Grund kann die Verarbeitung des Datums in Chrome zu erwarteten Ergebnissen führen (nicht immer) undInvalid Date
andere einwerfen .Betrachten wir
02.02.2018
,Chrome -
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
Die Verwendung
moment.js
erfolgt daher auf eigenes Risiko, falls die empfohlenen / Standardformate nicht verwendet werden.Um die Verfallswarnungen zu unterdrücken ,
moment
Erstellung an.Beispiel:
moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Beispiel:
moment("2018-02-01T18:30:00.000Z")
- ISO-Formatmoment("Thu, 01 Feb 2018 18:30:00 GMT")
- RFC2822-Format - Format in Githubmoment.suppressDeprecationWarnings = true;
Ich schlage vor, den Eingabe-Fallback im Moment zu überschreiben.
Da (3) alle Warnungen unterdrückt, unterdrückt (4) nur den Fallback der Datumskonstruktion. Mit (4) erhalten Sie
Invalid Date
als internenew Date()
verwendet wird und andere Abwertungen in der Konsole angezeigt werden, sodass der Moment aktualisiert oder die veralteten Methoden in der Anwendung ersetzt werden können.quelle
Wenn Ihr Datum von einer API als an Sie übergeben wird
string
(wie in meinem Problem), können Sie einen Filter verwenden, um die Zeichenfolge für einen Moment in ein Datum zu konvertieren. Dies wird den Moment der Konstruktionswarnung berücksichtigen.Fügen Sie es der Ansicht hinzu:
quelle
Wie in den obigen Antworten angegeben. Die Angabe des Datumsformats sollte funktionieren.
Warum sollte ich die Verfallsmeldung mit der folgenden Codezeile erhalten? Ich dachte, das String + -Format sollte das Problem beheben.
moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
. Bitte haben Sie auch keine Kontrolle über das bereitgestellte Datumsformat. Ich weiß, dass ich es selbst konvertieren kann, bis der'YYYY-MM-DDTHH:mm:ss'
Moment die Verfallsmeldung nicht anzeigt. Der Dokumentation zufolge sollte die Codezeile jedoch funktionieren. Hier ist die Abwertungsnachricht, die ich sehe.quelle