2つの異なる日付オブジェクトが同じ日付情報(同じ日、月、年など)を持っているかどうかを確認するにはどうすればよいですか?"=="、 "===" 、. equalsを試しましたが、どれも機能しないようです。
回答:
getTime()
戻っミリ秒単位の時間は、時間の両方は、同様にミリ秒の差を持つことができます。このソリューションでは、期待どおりに機能しません。使用してみてくださいtoDateString()
日付が時間に関係なく同じ日に発生するかどうかを確認することだけに関心がある場合は、この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
}
私はこのコードを使用しました:
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
ヘルナー、
あなたは試すことができます(関数名を許してください:)-getTimeではなくfelixのvalueofごとに修正されました)
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'
より良い日付サポートのために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 )
時間部分を無視して、2つの日付が等しいかどうかを判断するための単純な1行の代替方法:
function isSameDate(a, b) {
return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
日付aとbの違いが1日以内で、同じ曜日を共有しているかどうかを判別します。
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
真であろう)。