Привет,
Как проверить, имеют ли два разных объекта даты одинаковые данные даты (с тем же днем, месяцем, годом...)? Я пробовал "==", "===" и .equals, но никто не работает.
Привет,
Как проверить, имеют ли два разных объекта даты одинаковые данные даты (с тем же днем, месяцем, годом...)? Я пробовал "==", "===" и .equals, но никто не работает.
Вы можете использовать valueOf()
или getTime()
:
a = new Date(1995,11,17);
b = new Date(1995,11,17);
a.getTime() === b.getTime() // prints true
Я использовал этот код:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
Затем вы просто назовете это следующим образом: if (aDate.isSameDateAs(otherDate)) { ... }
Если вы заинтересованы только в проверке того, встречаются ли даты в тот же день независимо от времени, вы можете использовать метод toDateString()
для сравнения. Этот метод возвращает только дату без времени:
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
}
Hellnar,
вы можете попробовать (помилуй имя функции:) - исправлены за значение felix, а не getTime)
function isEqual(startDate, endDate) {
return endDate.valueOf() == startDate.valueOf();
}
использование:
if(isEqual(date1, date2)){
// do something
}
может помочь вам в этом.
см. также:
'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'
Преобразование типа в целые числа:
a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b; //true
вычесть их и сравнить с нолем:
var date1 = new Date();
var date2 = new Date();
//делаем что-то с датами...
(date1 - date2) ? alert("not equal") : alert("equal");
чтобы поместить его в переменную:
var datesAreSame = !(date1 - date2);
Простая однострочная альтернатива для определения того, равны ли две даты, игнорируя временную часть:
function isSameDate(a, b) {
return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
Определяет, будут ли даты a и b отличаться не более одного дня и использовать один и тот же день недели.
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