【Javascript】2つのDateオブジェクトが同じ時間を示していることを確認する

More than 1 year has passed since last update.

Dateオブジェクトで意外なところで詰まった。

var d1 = new Date('2015-2-14 00:00:00');
var d2 = new Date('2015-2-14 00:00:00');

2つのDateオブジェクトがあった際に、それらが同じ時間を指していることを示したい。

console.log(d1===d2) //false

ですよねー。。
ちょっとJSをかじったことがある方なら見えていた結果だと思います。

じゃあ、どうするか考えた。

あれ?そういえば比較ならいけるよね。

同じ時間ということは、d1はd2に比べて大きくもなく小さくもなくってことだよね。(頭のなかにベン図)

じゃあ、こうだ!

console.log(!(d1<d2||d1>d2)) //true

いけた!!!

他の方法も

数値にしてでの比較の方法も考えて、これも使えそうだなと。

console.log(parseInt(d1)===parseInt(d2)) //true
console.log(d1/1===d2/1) //true

ちなみに、以上かつ以下、というこれも使えるけど、

console.log(d1<=d2&&d1>=d2) //true

こちらはかなり遅い。

それぞれ100,000回実行した際の時間を書くと

console.log(!(d1<d2||d1>d2)) //3,070ms
console.log(parseInt(d1)===parseInt(d2)) //3,754ms
console.log(d1/1===d2/1) //2,880ms
console.log(d1<=d2&&d1>=d2) //8,386ms

ということでした。

console.log(!(d1<d2||d1>d2)) //3,070ms
console.log(d1/1===d2/1) //2,880ms

この2つはあんまり差はないので(1.07:1くらい)、あとはコードの可読性で選ぶ感じかな。

getYear() とかを使い続けて文字列化して比較、は明らかに遅そうなので試してさえいないっす。

他になんか良い方法ないんすかね。