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

Hel*_*nar 70 javascript date

问候,

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

Fel*_*ing 116

你可以使用valueOf()getTime():

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

a.getTime() === b.getTime() // prints true
Run Code Online (Sandbox Code Playgroud)

  • 因为在`> =`的情况下,值被转换为数字.在`=='的情况下,对象本身进行比较(并且只有'a == a`才是真的). (18认同)
  • 只是指出这个解决方案要求日期只包含日期部分,而很多人来这个问题可能会有不同的要求([例如jsFiddle中的时间部分](https://jsfiddle.net/KyleMit/ ez6sjn34 /)) (8认同)
  • 这意味着,<= b && a> = b可以解决问题 (4认同)
  • 如果有任何毫秒的差异,这将不起作用。由于 getTime() 返回的时间以毫秒为单位,因此两个时间也可以有毫秒的差异。在此解决方案中,它将无法按预期工作。尝试使用“toDateString()” (4认同)
  • 奇怪的是a&gt; = b有效,但是a == b无效! (2认同)
  • 因此,在使用此功能时,请确保时间部分设置为 0,这要归功于 [setHours 函数](https://www.w3schools.com/jsref/jsref_sethours.asp):`a.setHours(0,0,0,0 );` (2认同)

Inc*_*tly 38

我用过这段代码:

Date.prototype.isSameDateAs = function(pDate) {
  return (
    this.getFullYear() === pDate.getFullYear() &&
    this.getMonth() === pDate.getMonth() &&
    this.getDate() === pDate.getDate()
  );
}
Run Code Online (Sandbox Code Playgroud)

然后你就像这样称呼它: if (aDate.isSameDateAs(otherDate)) { ... }

  • 因为问题是"两个不同的日期对象具有相同的日期信息",并且此代码就是这样:不管时间如何都比较日期 (11认同)
  • 呃,我的意思是说"忽略小时,分钟和秒钟的差异" (2认同)

cyb*_*bat 33

如果您只想检查日期是否在同一天发生,那么您可以使用该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
}
Run Code Online (Sandbox Code Playgroud)


d2v*_*vid 13

键入convert to integers:

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true
Run Code Online (Sandbox Code Playgroud)

  • 很棒的使用一元运算符 (4认同)

jim*_*lan 6

Hellnar酒店,

你可以尝试(原谅函数名称:) - 根据felix的valueof修改,而不是getTime)

function isEqual(startDate, endDate) {
    return endDate.valueOf() == startDate.valueOf();
}
Run Code Online (Sandbox Code Playgroud)

用法:

if(isEqual(date1, date2)){
   // do something
}
Run Code Online (Sandbox Code Playgroud)

可能会让你成为那里的一部分.

也可以看看:

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


Ege*_*can 5

减去它们并与零比较:

var date1 = new Date();
var date2 = new Date();
Run Code Online (Sandbox Code Playgroud)

// 对日期做一些事情...

(date1 - date2) ? alert("not equal") : alert("equal");
Run Code Online (Sandbox Code Playgroud)

将其放入变量中:

var datesAreSame = !(date1 - date2);
Run Code Online (Sandbox Code Playgroud)


Phi*_*ker 5

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

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

它确定日期 a 和 b 是否相差不超过一天并且共享一周中的同一天。

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