2つの日付の日付情報が同じかどうかを確認する


82

2つの異なる日付オブジェクトが同じ日付情報(同じ日、月、年など)を持っているかどうかを確認するにはどうすればよいですか?"=="、 "===" 、. equalsを試しましたが、どれも機能しないようです。

回答:


136

valueOf()またはを使用できますgetTime()

a = new Date(1995,11,17);
b = new Date(1995,11,17);

a.getTime() === b.getTime() // prints true

18
>=値の場合は数値に変換されるためです。以下の場合には==オブジェクト自体を比較する(そして唯一a == a真であろう)。
Felix Kling 2013年

8
このソリューションでは日付が日付部分のみで構成されている必要があることを指摘するだけですが、この質問に来る多くの人は異なる要件を持っている可能性があります(例:jsFiddleの時間部分
KyleMit 2017

1
したがって、これを使用するときは、setHours関数のおかげで時間部分が0に設定されていることを確認してくださいa.setHours(0,0,0,0);
COil 2018

ミリ秒の差がある場合、これは機能しません。以来getTime()戻っミリ秒単位の時間は、時間の両方は、同様にミリ秒の差を持つことができます。このソリューションでは、期待どおりに機能しません。使用してみてくださいtoDateString()
RehanSattar19年

41

日付が時間に関係なく同じ日に発生するかどうかを確認することだけに関心がある場合は、この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
}

39

私はこのコードを使用しました:

Date.prototype.isSameDateAs = function(pDate) {
  return (
    this.getFullYear() === pDate.getFullYear() &&
    this.getMonth() === pDate.getMonth() &&
    this.getDate() === pDate.getDate()
  );
}

それからあなたはそれを次のように呼ぶだけです: if (aDate.isSameDateAs(otherDate)) { ... }


getTime()を2回だけ使用できるのに、なぜ12個の関数を実行するのでしょうか。ああ、時間、月、年の違いを無視することを考えていましたか?その場合、タイムゾーンの考慮事項が重要になり始めますか?
ErikE 2011年

12
質問は「2つの異なる日付オブジェクトが同じ日付情報を持っている」であり、このコードはまさにそれを行います:時間に関係なく日付を比較します
ちなみに

2
えーと、私は「時、分、秒の違いを無視する」と言う
つもりでした

14

整数に変換するタイプ:

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true

4
単項演算子のすばらしい使用
KingOfHypocrites 2014

6

ヘルナー、

あなたは試すことができます(関数名を許してください:)-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'


4

より良い日付サポートのためにmoment.jsisSameメソッドを使用してください

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 )

3

それらを減算し、ゼロと比較します。

var date1 = new Date();
var date2 = new Date();

//日付で何かをします...

(date1 - date2) ? alert("not equal") : alert("equal");

それを変数に入れるには:

var datesAreSame = !(date1 - date2);

3

時間部分を無視して、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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.