Mise à jour 2015
C'est une vieille question mais d'autres nouvelles questions comme:
être fermé en double de celui-ci, donc je pense qu'il est important d'ajouter de nouvelles informations ici. Je l'écris parce que j'ai eu peur de penser que les gens copient et collent une partie du code affiché ici et l'utilisent en production.
La plupart des réponses ici utilisent soit des expressions régulières complexes qui ne correspondent qu'à certains formats très spécifiques et le font en fait de manière incorrecte (comme la correspondance du 32 janvier sans correspondance avec la date ISO réelle comme annoncé - voir la démo ), soit elles essaient de transmettre quoi que ce soit au Date
constructeur et souhaite le meilleur.
Utiliser Moment
Comme je l'ai expliqué dans cette réponse, il existe actuellement une bibliothèque disponible pour cela:
Moment.js
Il s'agit d'une bibliothèque pour analyser, valider, manipuler et afficher les dates en JavaScript, qui possède une API beaucoup plus riche que les fonctions de gestion de date JavaScript standard.
Il est réduit à 12 Ko / gzippé et fonctionne dans Node.js et d'autres endroits:
bower install moment --save # bower
npm install moment --save # npm
Install-Package Moment.js # NuGet
spm install moment --save # spm
meteor add momentjs:moment # meteor
En utilisant Moment, vous pouvez être très précis sur la vérification des dates valides. Parfois, il est très important d'ajouter quelques indices sur le format que vous attendez. Par exemple, une date telle que 22/06/2015 ressemble à une date valide, sauf si vous utilisez un format JJ / MM / AAAA, auquel cas cette date doit être rejetée comme non valide. Il existe plusieurs façons de dire à Moment à quel format vous vous attendez, par exemple:
moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false
L' true
argument est là, donc le Moment n'essaiera pas d'analyser l'entrée si elle n'est pas exactement conforme à l'un des formats fournis (ce devrait être un comportement par défaut à mon avis).
Vous pouvez utiliser un format fourni en interne:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true
Et vous pouvez utiliser plusieurs formats en tant que tableau:
var formats = [
moment.ISO_8601,
"MM/DD/YYYY :) HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015 :) 13*17*21", formats, true).isValid(); // true
moment("06/22/2015 :( 13*17*21", formats, true).isValid(); // false
Voir: DEMO .
Autres bibliothèques
Si vous ne souhaitez pas utiliser Moment.js, il existe également d'autres bibliothèques:
Mise à jour 2016
J'ai créé le module immoment qui est comme (un sous-ensemble de) Moment mais sans surprise causé par la mutation d'objets existants (voir la documentation pour plus d'informations).
Mise à jour 2018
Aujourd'hui, je recommande d'utiliser Luxon pour la manipulation de date / heure au lieu de Moment, ce qui (contrairement à Moment) rend tous les objets immuables donc il n'y a pas de mauvaises surprises liées à la mutation implicite des dates.
Plus d'informations
Voir également:
Une série d'articles de Rob Gravelle sur les bibliothèques d'analyse de dates JavaScript:
Conclusion
Bien sûr, n'importe qui peut essayer de réinventer la roue, écrire une expression régulière (mais veuillez lire ISO 8601 et RFC 3339 avant de le faire) ou appeler des constructeurs intégrés avec des données aléatoires pour analyser les messages d'erreur comme 'Invalid Date'
(Êtes-vous sûr que ce message est exactement la même sur toutes les plates-formes? Dans tous les pays? À l'avenir?) ou vous pouvez utiliser une solution testée et utiliser votre temps pour l'améliorer, pas la réinventer. Toutes les bibliothèques répertoriées ici sont des logiciels libres et open source.