Es folgt das Szenario:
Ich habe ein String
Datum und ein anderes Datumsformat. Bsp.:
Datum: 19.10.2016
DatumFormat: "TT-MM-JJJJ".
Ich muss überprüfen, ob dieses Datum ein gültiges Datum ist.
Ich habe versucht, folgende Dinge zu tun
var d = moment("2016-10-19",dateFormat);
d.isValid()
kommt false
jedes Mal zurück. Analysiert Moment.js das Datum nicht im angegebenen Format?
Dann habe ich versucht, das Datum DD-MM-YYYY
zuerst zu formatieren und dann an Moment.js zu übergeben:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Jetzt date.isValid()
gebe ich das gewünschte Ergebnis, aber hier wird das Datumsobjekt Moment.js zweimal erstellt. Wie kann ich das vermeiden? Gibt es eine bessere Lösung?
Zu Ihrer Information, ich darf das nicht ändern dateFormat
.
javascript
date
datetime
momentjs
Ganesh
quelle
quelle
Antworten:
Konnte die Lösung finden. Da das Datum, das ich erhalte, im ISO-Format vorliegt, wird es nur durch Angabe des Datums bis zum Moment validiert, ohne dass das Datumsformat übergeben werden muss.
Und
date.isValid()
gibt dann das gewünschte Ergebnis.quelle
var a = moment('12345'); a.isValid() // is true
Dies schlägt fehl, da der Moment auf das Standard-Datumsobjekt zurückgreift, wenn das Datum nicht analysiert werden kann. Und das Standard-moment('02').isValid() === true
, also möchten Sie vielleicht vorsichtig damit seinmoment('abcde 1').isValid() === true
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Sie sollten beim Aufrufen ein drittes Argument hinzufügen, das eine
moment
strikte Analyse erzwingt. Hier ist der relevante Teil der Momentdokumentation http://momentjs.com/docs/#/parsing/string-format/. Sie befindet sich am Ende des Abschnitts.quelle
Los geht's: Working Fidddle
quelle
2016-10-19
?var d = moment("2016-10-19",dateFormat);
?Ich benutze Moment zusammen mit neuem Datum, um Fälle von
undefined
Datenwerten zu behandeln:const date = moment(new Date("2016-10-19"));
wegen:
moment(undefined).isValid() == true
wo als der bessere Weg:
moment(new Date(undefined)).isValid() == false
quelle
Ich habe gerade einen wirklich durcheinandergebrachten Fall gefunden.
quelle
moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false
. Verwenden Sie den strengen Modus :) momentjs.com/guides/#/parsing/strict-modeSo überprüfen Sie mithilfe von Moment, ob eine Zeichenfolge ein gültiges Datum ist, wenn sich Datum und Datumsformat unterscheiden
Entschuldigung, aber hat eine der angegebenen Lösungen in diesem Thread tatsächlich die gestellte Frage beantwortet?
Folgendes funktioniert für mich ...
Aber ehrlich gesagt, verstehe nicht, warum
moment.isDate()
( wie dokumentiert ) nur ein Objekt akzeptiert wird. Sollte meiner Meinung nach auch einen String unterstützen.quelle
quelle
Wenn das Datum gültig ist, ist das
getTime()
immer gleich.quelle
Probier diese. Es ist nicht schön, aber es wird funktionieren, solange die Eingabe von Ihrer Datumsauswahl ein konstantes Format hat.
In diesem Beispiel ist badDate von Ihrem Picker
https://jsfiddle.net/xs8tvox9/
quelle