如何在javascript中检查2个日期相等

时间:2017-01-11 10:05:55

标签: javascript date

我有2个日期对象,如下所示:

var d1 = new Date(2017, 01, 11, 20, 59, 59);
var d2 = new Date(2017, 01, 11, 22, 59, 59);
d1 == d2 //false

在上面的示例中,d1不等于d2

但是,我想根据datemonthyear检查相等性,而不考虑时间值。

任何人都可以帮助我

5 个答案:

答案 0 :(得分:2)

您可以单独访问Date对象上的日期,月份和年份值(请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)。这允许您根据特定日期字段的相等性指定自己的比较函数。

对于您所描述的情况,简单的d1.toDateString() === d2.toDateString()会这样做。

答案 1 :(得分:1)

通过创建一个以MM / DD / YYYY格式返回日期的函数来尝试此操作,排除时间如下:

function GetFormattedDate(dateObj) {

    var dt = dateObj
    var d = dt.getDate();
    var dd = d < 10 ? "0" + d : d;
    var m = dt.getMonth() + 1;
    var mm = m < 10 ? "0" + m : m;
    var y = dt.getFullYear();

    return mm + "/" + dd + "/" + y;

}

然后使用此函数:

var d1 = GetFormattedDate(new Date(2017, 01, 11, 20, 59, 59));
var d2 = GetFormattedDate(new Date(2017, 01, 11, 22, 59, 59));

if(d1 == d2)
   return true;
else
  return false;

答案 2 :(得分:1)

您可以使用getTime函数:

&#13;
&#13;
var d1 = new Date(2017, 01, 11, 23, 59, 59);
var d2 = new Date(2017, 01, 11, 22, 59, 59);

d1 = new Date(d1.getYear()+1900, d1.getMonth(), d1.getDate());
d2 = new Date(d2.getYear()+1900, d2.getMonth(), d2.getDate());

console.log(d1.getTime() === d2.getTime());//true since I changed the value of D1 and D2
&#13;
&#13;
&#13;

答案 3 :(得分:0)

匹配两个日期的最佳方法是将它们转换为时间格式然后匹配。

d1.getTime() === d2.getTime()

希望它适合你。

答案 4 :(得分:0)

一种简单的方法是复制日期,将时间设置为零,然后比较时间值:

&#13;
&#13;
function areEquivalentDates(d0, d1) {
  return new Date(d0).setHours(0,0,0,0) == new Date(d1).setHours(0,0,0,0);
}

// Test some dates
[[new Date(2017,1,23,0,0,0,1),
  new Date(2017,1,23,23,59,59,999)],
 [new Date(2017,1,23,12,0,0,1),
  new Date(2017,1,23,12,0,0,0)],
 [new Date(2017,1,23,23,59,59,999),
  new Date(2017,1,24,0,0,0,0)]
].forEach(a => console.log(a[0].toString() + '\n' +
                           a[1].toString() + '\n' + 
                           areEquivalentDates(a[0],a[1])
                          )
);
 
&#13;
&#13;
&#13;