JavaScript Détection Des Dates De Validité
Double Possible:
La détection d'une “date invalide” instance de Date en JavaScript
J'ai été en utilisant la suite pour détecter une date valide:
var text = $('#Date').val();
var date = Date.parse(text);
if (isNaN(date)) {
//Invalid date
}
Mais a constaté que la Date.analyser pense que les éléments suivants sont des dates de validité (mm/jj/aaaa)
- 2/30/2011
- 11/31/2011
Tout autre moyen de détecter des dates non valides lorsque le nombre de jours dépasse le nombre total de
jours dans le mois?
Mise à JOUR: Un encore plus grand problème, c'est que le plugin jQuery validation ne détecte pas cela comme une date non valide soit!
SOLUTION:
Basé sur @Guffa de commentaires, j'ai créé la fonction suivante pour valider les dates:
function validDate(text) {
var date = Date.parse(text);
if (isNaN(date)) {
return false;
}
var comp = text.split('/');
if (comp.length !== 3) {
return false;
}
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var date = new Date(y, m - 1, d);
return (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d);
}
- Date.analyser pense pas qu'ils sont corrects, mais il les convertit en date correcte pour vous. E. g.
2/30/2011
se terminera à la03/02/2011
- après le vote de près dupe, j'ai réalisé que la condition de la question n'est pas identique, même si c'est lié.
- Puisque j'avais besoin de l'appui d'entrée dans plusieurs zones géographiques, nous avons mis en place notre propre date de l'analyseur. Le seul moyen que nous avons trouvé pour détecter cette erreur a été de comparer la chaîne de mois que nous avons analysé avec le mois qui vient de l'extérieur de la Date générée
- Utilisez simplement moment.js comme ça momentjs.com/docs/#/parsing/is-valid <3
- Double Possible de la Détection d'une "date invalide" instance de Date en JavaScript
Vous devez vous connecter pour publier un commentaire.
Pour vérifier si une date est valide, vous pouvez analyser les composants de la date, de créer un
Date
objet à partir d'elle, et de vérifier si les composants dans les données est le même que l'analyse des composants. Si vous créez unDate
objet de compnents qui sont hors de portée, les valeurs de débit à la prochaine/précédente période pour créer une date valide.Par exemple,
new Date(2011,0,42)
permettra de créer un objet qui contient la date 2/11/2011 au lieu de 1/42/2011.Par l'analyse des composants au lieu de la date complète vous permettra également de contourner le problème avec les différents formats de date. Mon navigateur par exemple s'attendre à un format de date comme
y-m-d
plutôt qued/m/y
.Exemple:
Démo: http://jsfiddle.net/Guffa/UeQAK/
new Date(Date.UTC())
etDate.prototype.getUTC*()
à la place.Si votre format de la date est fixée comme
M/D/YYYY
, vous pourriez re-format de l'analyse de la date et de voir si elle correspond à l'entrée:Cependant, qui ne tolère pas les espaces ou des zéros numéros.
Si vous n'avez pas besoin de garder l'entrée de l'utilisateur exactement, vous pourriez tout reformater le jour de toute façon et de faire semblant que c'est ce qu'ils ont saisies.
Mais si vous ne pouvez pas le faire, je voudrais analyser les composants moi-même à l'aide d'une RegExp puis de les comparer à des valeurs de l'
Date
méthodes.Vous pouvez écrire un script pour le faire manuellement:
Bien sûr, vous aussi, vous avez besoin de quelque chose à regarder dehors pour les années bissextiles, mais rappelez-vous que toute l'année divisible par 4 et non par 100 est une année bissextile, à moins que les deux premiers chiffres de l'année sont divisibles par 4. Qui devrait être facile à inclure dans cette fonction.
==
pas=
?L'exemple est mal
le bon est
<=
au lieu de=
Mais l'exemple de la sont très!