如何检查两个不同的日期对象是否具有相同的日期信息(具有相同的日,月,年...)?我已经尝试过“ ==”,“ ===“和.equals,但似乎都没有用。
Answers:
a.setHours(0,0,0,0);
getTime()
返回的时间以毫秒为单位,因此这两个时间的毫秒数也可能有所不同。在此解决方案中,它将无法按预期方式工作。尝试使用toDateString()
我使用以下代码:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
然后,您可以这样称呼它: if (aDate.isSameDateAs(otherDate)) { ... }
为了获得更好的日期支持,请使用moment.js和isSame方法
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 )
减去它们并与零比较:
var date1 = new Date();
var date2 = new Date();
//对日期做点事...
(date1 - date2) ? alert("not equal") : alert("equal");
将其放入变量中:
var datesAreSame = !(date1 - date2);
一种简单的单行替代方法,用于确定两个日期是否相等,而忽略时间部分:
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
>=
值会转换为数字。如果==
对象是自己比较的(只有a == a
这样)。