122 votes

Vérifier si une date est comprise entre deux dates

Je dois vérifier si un date - une chaîne de caractères dans dd/mm/yyyy format - se situe entre deux autres dates ayant le même format dd/mm/yyyy

J'ai essayé ça, mais ça ne marche pas :

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var from = Date.parse(dateFrom);
var to   = Date.parse(dateTo);
var check = Date.parse(dateCheck );

if((check <= to && check >= from))      
    alert("date contained");

J'ai utilisé le débogueur et vérifié, le to y from les variables ont isNaN valeur. Pouvez-vous m'aider ?

141voto

tracevipin Points 8987

Date.parse supporte le format mm/dd/yyyy no dd/mm/yyyy . Pour ce dernier point, utilisez une bibliothèque comme moment.js ou faites quelque chose comme indiqué ci-dessous

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);

console.log(check > from && check < to)

80voto

Jasmine Howell Points 761

Au lieu de comparer les dates directement, comparez la valeur getTime() de la date. La fonction getTime() renvoie le nombre de millisecondes depuis le 1er janvier 1970 sous forme d'un nombre entier - il devrait être trivial de déterminer si un nombre entier se situe entre deux autres nombres entiers.

Quelque chose comme

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))      alert("date contained");

25voto

Pandian Points 3355

Essayez ce qui est ci-dessous. Cela vous aidera...

Violon : http://jsfiddle.net/RYh7U/146/

script :

if(dateCheck("02/05/2013","02/09/2013","02/07/2013"))
    alert("Availed");
else
    alert("Not Availed");

function dateCheck(from,to,check) {

    var fDate,lDate,cDate;
    fDate = Date.parse(from);
    lDate = Date.parse(to);
    cDate = Date.parse(check);

    if((cDate <= lDate && cDate >= fDate)) {
        return true;
    }
    return false;
}

11voto

Andrew Mykhalchuk Points 106

Une manière simplifiée de le faire, basée sur la réponse acceptée.

Dans mon cas, j'avais besoin de vérifier si la date actuelle (Aujourd'hui) se trouve dans l'intervalle de deux autres dates. J'ai donc utilisé newDate() au lieu de valeurs codées en dur, mais vous pouvez comprendre comment vous pouvez utiliser des dates codées en dur.

var currentDate = new Date().toJSON().slice(0,10);
var from = new Date('2020/01/01');
var to   = new Date('2020/01/31');
var check = new Date(currentDate);

console.log(check > from && check < to);

11voto

La réponse qui a 50 votes ne vérifie pas la date, mais seulement les mois. Cette réponse n'est pas correcte. Le code ci-dessous fonctionne.

var dateFrom = "01/08/2017";
var dateTo = "01/10/2017";
var dateCheck = "05/09/2017";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1);  // -1 because months are from 0 to 11
var to   = new Date(d2);
var check = new Date(c);

alert(check > from && check < to);

Voici le code affiché dans une autre réponse. J'ai modifié les dates et c'est ainsi que j'ai remarqué que cela ne fonctionne pas.

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "07/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);

alert(check > from && check < to);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X