2017-02-06 7 views
2

javascriptで日付比較を行っているとき、ブラウザコンソールで次の操作を実行しました。なぜ日付比較はjavascriptで奇妙な動作を示していますか?

new Date() >= new Date()

new Date() <= new Date()を返さnew Date() == new Date()、私は両方が同じであると思ったように私が正しかった場合、これは、良い見

を返却すべき

を返します。

インタレストそれはを返しました。その後、私は

同様の操作の下に行わ

new Date() > new Date()

new Date() < new Date()を返さも、私の前提と大丈夫だった

new Date() != new Date()戻り

を返しました。

新しいDate() sが同じ時間を返した両方の場合は、==> =と= <とともにを返す必要があり、他の賢明な>または<のいずれかとして返します。!=を返します。です。

次の表は、異なるケースの予想結果と実際の結果で構成されています。

enter image description here

ACTUAL結果列は、その前の列のいずれかを次のされていないのはなぜ?

+0

[?2つのJavaScriptオブジェクトのための平等を決定する方法](http://stackoverflow.com/questions/201183/how-to-determine-equality -for-two-javascript-objects)を使用します。日付はおそらく例外ではありません。 –

+1

これらの演算子をDateオブジェクトに適用すると、整数でキャストしようとします(unixフォーマットの時刻を意味する+新しいDate()と同様です)。 –

+3

'=='比較を実行すると、 "これらの変数は同じオブジェクトを参照していますか?"、これは 'false'です。他のすべての比較は、オブジェクト内のタイムスタンプ上で動作します。 –

答えて

4

タイムスタンプを比較するにはDate.getTimeを使用してください。それ以外の場合は、同じではないことがわかっているオブジェクトを単純に比較しています。あなたがやっているような平等のための

var d1 = new Date(), 
 
    d2 = new Date(); 
 

 
function fullCompare(a, b) { 
 
    console.log(a == b, a <= b, a >= b, a < b, a > b); 
 
} 
 
fullCompare(d1, d2); 
 
fullCompare(d1.getTime(), d2.getTime());

+0

です。私は1つの疑問を持っていますが、オブジェクトとして比較すると、==はfalseです。> =は真です。 –

+1

@sitchie '> ='と '>'は1970年以降の内部タイムスタンプをミリ秒単位で比較しますが、 '> ='は 'same value以上 'で、両方の日付が同じタイムスタンプのミリ秒数を保持するためtrueを返します。 '> 'は' Higher than'比較であり、これは**同じ**値を含んでいるためにfalseです。 –

3

チェックは、オブジェクトへの参照を比較します。オブジェクト自体の実際の値を比較するには、getTime()メソッドを呼び出して、1970-01-01 00:00:00 UTCからのミリ秒数を返します。

したがって、次のコードは、trueを返します。

(new Date()).getTime() == (new Date()).getTime() 
+0

を入力してから、値を* millisecond *精度と比較します。 @シッチェ、その精度が欲しいですか? –

関連する問題