Checking if two Dates have the same date info

Greetings,

How can I check if two different date objects have the same date information(having same day, month, year ...)? I have tried "==", "===" and .equals but none seems to work.

Answers:

Answer

I used this code:

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

Then you just call it like : if (aDate.isSameDateAs(otherDate)) { ... }

Answer

If you are only interested in checking if dates occur on the same day regardless of time then you can use the toDateString() method to compare. This method returns only the date without time:

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
}
Answer

Type convert to integers:

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

Hellnar,

you could try (pardon the function name :) - amended per felix's valueof, rather than getTime)

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

usage:

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

might get you part of the way there.

see also:

'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'

Answer

subtract them and compare to zero:

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

// do something with the dates...

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

to put it into a variable:

var datesAreSame = !(date1 - date2);
Answer

For better date support use moment.js and isSame method

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 )
Answer

A simple single line alternative for determining if two dates are equal, ignoring the time part:

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

It determines if dates a and b differ no more than one day and share the same day of the week.

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

Answer

You can use valueOf() or getTime():

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

a.getTime() === b.getTime() // prints true

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.