Як я можу перевірити, чи мають два різні об’єкти дати однакову інформацію про дату (з однаковим днем, місяцем, роком ...)? Я пробував "==", "===" та .equals, але, здається, жоден не працює.
Відповіді:
a.setHours(0,0,0,0);
getTime()
повертає час у мілісекундах, обидва рази також можуть мати різницю в мілісекундах. У цьому рішенні воно не буде працювати належним чином. Спробуйте скористатисяtoDateString()
Якщо вас цікавить лише перевірка того, чи трапляються дати в той самий день, незалежно від часу, ви можете скористатися 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
}
Я використав цей код:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
Тоді ви просто називаєте це так: if (aDate.isSameDateAs(otherDate)) { ... }
Хелнар,
ви можете спробувати (вибачте за ім'я функції :) - змінено на значення 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'
Для кращої підтримки дати використовуйте moment.js та метод 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 )
відняти їх і порівняти з нулем:
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
>=
значення перетворюються в числа. У випадку,==
якщо об'єкти порівнюються між собою (і лишеa == a
це буде правдою).