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

StackOverflow https://stackoverflow.com/questions/73971

  •  09-06-2019
  •  | 
  •  

Question

En JavaScript, quel est le meilleur moyen de déterminer si une date fournie se situe dans une plage valide?

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

Était-ce utile?

La solution

C’est en fait un problème que j’ai souvent vu se poser dans mes œuvres 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 remarques à faire à propos de ce code, la fonction Date.parse devrait fonctionner pour la plupart des types d'entrée, mais certains formats, tels que "AAAA MM JJ", sont connus. vous devriez donc tester cela avant de l'utiliser. Cependant, il me semble rappeler que la plupart des navigateurs interprètent la chaîne de date donnée à Date.parse en fonction des paramètres de région de l’ordinateur.

En outre, le multiplicateur pour 86400000 devrait être quelle que soit la plage de jours que vous recherchez. Donc, si vous recherchez des dates distantes d’au moins une semaine, vous devriez en choisir sept.

Autres conseils

Donc, si je comprends bien, vous devez 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'interface utilisateur, avec Date.parse, comme suit:

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

Est-ce que cela vous 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 différents formats que vous pouvez transmettre au constructeur Date () pour construire une date. Vous pouvez également construire une nouvelle date avec l'heure actuelle:

var now = new Date();

et définissez diverses propriétés sur celui-ci:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top