如何检查两个不同的日期对象是否具有相同的日期信息(即是否具有相同的日、月、年等)?我尝试过“==”、“===”和.equals,但都不起作用。
如何检查两个不同的日期对象是否具有相同的日期信息(即是否具有相同的日、月、年等)?我尝试过“==”、“===”和.equals,但都不起作用。
toDateString()
方法进行比较。此方法仅返回日期而不包括时间:methodvar 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
}
我使用了这段代码:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
然后你可以像这样调用它:if (aDate.isSameDateAs(otherDate)) { ... }
将类型转换为整数:
a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b; //true
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'
如果要确定两个日期是否相等,忽略时间部分,可以使用简单的单行代码:
function isSameDate(a, b) {
return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
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
将它们相减并与零进行比较:
var date1 = new Date();
var date2 = new Date();
// 处理日期方面的操作...
(date1 - date2) ? alert("not equal") : alert("equal");
将其存入变量中:
var datesAreSame = !(date1 - date2);
为了更好地支持日期,请使用 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 )
我喜欢使用这段代码
function isEqualDate(d1, d2) {
return (
d1.toISOString().startsWith(d2.toISOString().substring(0,10))
);
}
console.log(isEqualDate(new Date(2022,2,2,10,57), new Date(2022,2,2,11,57)) )
console.log(isEqualDate(new Date(), new Date(2022,2,2)) )
console.log(isEqualDate(new Date(), new Date()) )
>=
的情况下,值会被转换成数字。而在==
的情况下,对象本身会被进行比较(只有a == a
会返回真)。 - Felix Klinga.setHours(0,0,0,0);
- COilgetTime()
返回的是以毫秒为单位的时间,两个时间也可能有毫秒的差异。在这个解决方案中,它将无法按预期工作。尝试使用toDateString()
。 - Rehan Sattar