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()
とかを使い続けて文字列化して比較、は明らかに遅そうなので試してさえいないっす。
他になんか良い方法ないんすかね。