Je voudrais tester si une date et/ou une heure entrée est valide.
Cela peut-il être fait à un moment où les tests de date et d'heure avec JavaScript semblent un cauchemar. (ont passé des heures sur cela).
Les données de test ressemblent à ceci.
invalide
invalid = ""
invalid = " "
invalid = "x"
invalid = "1/1"
invalid = "30/2/2015"
invalid = "2/30/2015"
est valide
isvalid = "1/12/2015"
isvalid = "1/12/2015 1:00 PM";
J'ai essayé diverses méthodes javascript sans succès pendant des heures.
Je pensais que le moment aurait quelque chose pour cela. J'ai donc essayé ce qui suit, ce qui ne fonctionne pas car je ne pense pas que le moment fonctionne de la sorte.
var valid = moment(input).isDate()
var valid = moment().isDate(input)
Mon format de temps est "jj/mm/aaaa"
Oui, vous pouvez utiliser momentjs pour l'analyser et le comparer avec la chaîne
function isValidDate(str) {
var d = moment(str,'D/M/YYYY');
if(d == null || !d.isValid()) return false;
return str.indexOf(d.format('D/M/YYYY')) >= 0
|| str.indexOf(d.format('DD/MM/YYYY')) >= 0
|| str.indexOf(d.format('D/M/YY')) >= 0
|| str.indexOf(d.format('DD/MM/YY')) >= 0;
}
Code de test
tests = ['',' ','x','1/1','1/12/2015','1/12/2015 1:00 PM']
for(var z in tests) {
var test = tests[z];
console.log('"' + test + '" ' + isValidDate(test));
}
Sortie
"" false
" " false
"x" false
"1/1" false
"1/12/2015" true
"1/12/2015 1:00 PM" true
Moment a une fonction appelée isValid
.
Vous souhaitez utiliser cette fonction avec le format de date cible et le paramètre d'analyse strict sur true (sinon votre validation pourrait ne pas être cohérente) pour déléguer à la bibliothèque toutes les vérifications nécessaires (comme les années bissextiles):
var dateFormat = "DD/MM/YYYY";
moment("28/02/2011", dateFormat, true).isValid(); // return true
moment("29/02/2011", dateFormat, true).isValid(); // return false: February 29th of 2011 does not exist, because 2011 is not a leap year