检查两个日期是否具有相同的日期信息


82

如何检查两个不同的日期对象是否具有相同的日期信息(具有相同的日,月,年...)?我已经尝试过“ ==”,“ ===“和.equals,但似乎都没有用。

Answers:


136

您可以使用valueOf()getTime()

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

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

18
因为在这种情况下,>=值会转换为数字。如果==对象是自己比较的(只有a == a这样)。
Felix Kling 2013年

8
只是指出此解决方案需要日期仅包含日期部分,而很多人可能对此有不同的要求(例如jsFiddle中的时间部分
KyleMit

1
因此,使用setHours函数时,请确保将时间部分设置为0 :a.setHours(0,0,0,0);
线圈

如果毫秒之间有任何差异,这将无法正常工作。由于getTime()返回的时间以毫秒为单位,因此这两个时间的毫秒数也可能有所不同。在此解决方案中,它将无法按预期方式工作。尝试使用toDateString()
Rehan Sattar,

41

如果仅对检查日期是否在同一天而不考虑时间感兴趣,则可以使用该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
}

39

我使用以下代码:

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

然后,您可以这样称呼它: if (aDate.isSameDateAs(otherDate)) { ... }


当只使用两次getTime()时,为什么还要运行一打函数?哦,您是否在考虑忽略小时,月份和年份的差异?在那种情况下,时区考虑可能开始变得重要了?
ErikE 2011年

12
因为问题是“两个不同的日期对象具有相同的日期信息”,所以此代码仅用于:比较日期,而不考虑时间
偶然地,

2
呃,我的意思是说“忽略时,分和秒的差异”
ErikE,2011年

14

类型转换为整数:

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

4
一元运算符的
出色用法

6

海尔纳尔

您可以尝试一下(请使用函数名:)-根据felix的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'


4

为了获得更好的日期支持,请使用moment.jsisSame方法

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 )

3

减去它们并与零比较:

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

//对日期做点事...

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

将其放入变量中:

var datesAreSame = !(date1 - date2);

3

一种简单的单行替代方法,用于确定两个日期是否相等,而忽略时间部分:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.