web-dev-qa-db-fra.com

Vérifier si deux dates ont la même information de date

Salutations,

Comment puis-je vérifier si deux objets de date différents ont la même information de date (même jour, mois, année, etc.)? J'ai essayé "==", "===" et .equals mais aucun ne semble fonctionner.

59
Hellnar

Vous pouvez utiliser valueOf() ou getTime() :

a = new Date(1995,11,17);
b = new Date(1995,11,17);

a.getTime() === b.getTime() // prints true
101
Felix Kling

J'ai utilisé ce code:

Date.prototype.isSameDateAs = function(pDate) {
  return (
    this.getFullYear() === pDate.getFullYear() &&
    this.getMonth() === pDate.getMonth() &&
    this.getDate() === pDate.getDate()
  );
}

Ensuite, vous appelez simplement comme suit: if (aDate.isSameDateAs(otherDate)) { ... }

34
Incidently

Si vous souhaitez uniquement vérifier si les dates ont lieu le même jour, quelle que soit l'heure, vous pouvez utiliser la méthode toDateString()- à comparer. Cette méthode ne renvoie que la date sans heure:

var start = new Date('2015-01-28T10:00:00Z');
var end = new Date('2015-01-28T18:00:00Z');

if (start.toDateString() === end.toDateString()) {
  // Same day - maybe different times
} else {
  // Different day
}
25
cyberwombat

Tapez converti en entiers:

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true
10
d2vid

Hellnar,

vous pouvez essayer (excusez le nom de la fonction :) - modifié par la valeur de felix, plutôt que par getTime)

function isEqual(startDate, endDate) {
    return endDate.valueOf() == startDate.valueOf();
}

usage:

if(isEqual(date1, date2)){
   // do something
}

pourrait vous obtenir une partie du chemin là-bas. 

voir également:

"http://www.Java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm"

6
jim tollan

soustrayez-les et comparez-les à zéro:

var date1 = new Date();
var date2 = new Date();

// fais quelque chose avec les dates ...

(date1 - date2) ? alert("not equal") : alert("equal");

pour le mettre dans une variable:

var datesAreSame = !(date1 - date2);
3
Ege Özcan

Une alternative simple à une ligne pour déterminer si deux dates sont égales, en ignorant la partie temporelle:

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

Il détermine si les dates a et b ne diffèrent pas plus d'un jour et partagent le même jour de la semaine.

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

console.log(isSameDate(new Date(2017, 7, 21), new Date(2017, 7, 21))); //exact same date => true
console.log(isSameDate(new Date(2017, 7, 21, 23, 59, 59), new Date(2017, 7, 21))); //furthest same dates => true
console.log(isSameDate(new Date(2017, 7, 20, 23, 59, 59), new Date(2017, 7, 21))); //nearest different dates => false
console.log(isSameDate(new Date(2016, 7, 21), new Date(2017, 7, 21))); //different year => false
console.log(isSameDate(new Date(2017, 8, 21), new Date(2017, 7, 21))); //different month => false

1
Philip Bijker

Pour un meilleur support des dates, utilisez la méthode moment.js et isSame

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-04-06').startOf('day');

console.log(starDate.isSame(endDate)); // false ( month is different )

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-03-06').startOf('day');

console.log(starDate.isSame(endDate)); // true ( year, month and day are the same )
0
que1326