Проверка, если две даты имеют одинаковую информацию о дате


с приветом,

Как я могу проверить, имеют ли два разных объекта даты одну и ту же информацию о дате(имея один и тот же день, месяц, год ...)? Я уже пробовал "==", "===" и ...равны, но никто, кажется, не работает.

8   51   2010-12-13 14:25:35

8 ответов:

можно использовать 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
}

тип преобразования в целые числа:

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

Хедльнар,

вы можете попробовать (простите имя функции:) - исправлено в valueof Феликса, а не 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'

вычесть их и сравнить с нулем:

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

для лучшей поддержки использовать момент.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 )