En utilisant Javascript, comment puis-je m'assurer qu'une date est valide?

En JavaScript, quelle est la meilleure façon de déterminer si une date fournie relève d'une plage valide?

Un exemple de ceci pourrait être vérifier si l'entrée de l'utilisateur requestedDate fait partie de la prochaine semaine de travail valide. Notez qu'il ne s'agit pas seulement de vérifier si une date est plus grande qu'une autre, car une date valide serait égale ou supérieure à l'extrémité inférieure de la plage, alors qu'elle serait inférieure ou égale à l'extrémité supérieure de la plage.

C'est en fait un problème que j'ai vu venir avant beaucoup dans mes travaux et le bit de code suivant est ma réponse au problème.

 // checkDateRange - Checks to ensure that the values entered are dates and // are of a valid range. By this, the dates must be no more than the // built-in number of days appart. function checkDateRange(start, end) { // Parse the entries var startDate = Date.parse(start); var endDate = Date.parse(end); // Make sure they are valid if (isNaN(startDate)) { alert("The start date provided is not valid, please enter a valid date."); return false; } if (isNaN(endDate)) { alert("The end date provided is not valid, please enter a valid date."); return false; } // Check the date range, 86400000 is the number of milliseconds in one day var difference = (endDate - startDate) / (86400000 * 7); if (difference < 0) { alert("The start date must come before the end date."); return false; } if (difference <= 1) { alert("The range must be at least seven days apart."); return false; } return true; } 

Maintenant, quelques choses à noter sur ce code, la fonction Date.parse devrait fonctionner pour la plupart des types de saisie, mais il a été connu pour avoir des problèmes avec certains formats tels que "YYYY MM DD" afin que vous devriez tester cela avant de l'utiliser. Cependant, je me souviens que la plupart des navigateurs interpréteront la chaîne de date donnée à Date.parse en fonction des paramètres de la région des ordinateurs.

En outre, le multiplicateur pour 86400000 devrait être n'importe quelle gamme de jours que vous recherchez est. Donc, si vous cherchez des dates qui sont au moins une semaine d'intervalle, cela devrait être sept.

Donc, si je comprends bien, il faut regarder si une date est plus grande que l'autre.

 function ValidRange(date1,date2) { return date2.getTime() > date1.getTime(); } 

Vous devez ensuite analyser les chaînes que vous obtenez de l'IU, avec Date.parse, comme ceci:

 ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008')); 

Est ce que ça aide?

 var myDate = new Date(2008, 9, 16); // is myDate between Sept 1 and Sept 30? var startDate = new Date(2008, 9, 1); var endDate = new Date(2008, 9, 30); if (startDate < myDate && myDate < endDate) { alert('yes'); // myDate is between startDate and endDate } 

Il existe une variété de formats que vous pouvez passer au constructeur Date () pour construire une date. Vous pouvez également créer une nouvelle date avec l'heure actuelle:

 var now = new Date(); 

Et définir diverses propriétés sur elle:

 now.setYear(...); now.setMonth(...); // etc 

Voir http://www.javascriptkit.com/jsref/date.shtml ou Google pour plus de détails.