我有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
但是,我想根据date
,month
和year
检查相等性,而不考虑时间值。
任何人都可以帮助我
答案 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函数:
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;
答案 3 :(得分:0)
匹配两个日期的最佳方法是将它们转换为时间格式然后匹配。
d1.getTime() === d2.getTime()
希望它适合你。
答案 4 :(得分:0)
一种简单的方法是复制日期,将时间设置为零,然后比较时间值:
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;