8

Date文字列から構築された適切なオブジェクトがあると仮定しましょう: "Tue Jan 12 21:33:28 +0000 2010"

var dateString = "Tue Jan 12 21:33:28 +0000 2010";
var twitterDate = new Date(dateString);

次に、<および> より小さいおよびより大きい比較演算子を使用して、同様に構成されたよりも新しいか少ないかを確認しますDate。これらの演算子を使用して日付を比較するためのアルゴリズムは指定されていますか、それとも特に指定localeCompareされていませんか?言い換えれば、私はこの方法でより最近の日付を取得することが保証されていますか?

var now = new Date();
if (now < twitterDate) {
    // the date is in the future
}
4

3 に答える 3

8

ECMAScriptのオブジェクトに対するリレーショナル操作は、 valueOf を使用して定義されたときにアクセスできる内部ToPrimitive関数(ヒント番号付き)に依存しています。

試す

var val = new Date().valueOf();

日付の内部値を取得します。これは、多くの言語と同様に、1970年1月1日UTCの午前0時からのミリ秒数です(を使用した場合と同じですgetTime())。

これは、設計上、日付比較が常に正しく機能することを保証していることを意味します。

この記事では、詳細について説明しますtoPrimitive(ただし、比較に関しては何も説明しません)。

于 2012-11-08T08:55:14.610 に答える
1

ECMA Script仕様に記載されているように、Javascriptの日付値は数値です。したがって、日付の値は数値として比較されます。

これはあなたのコードのデモです(私は将来twitterDateを設定します)。

(function(){
    var dateString = "Tue Jan 12 21:33:28 +0000 2014";
    var twitterDate = new Date(dateString);

    var now = new Date();
    if (now < twitterDate) {
         document.write('twitterDate is in the future');
    }
    else
    {
        document.write('twitterDate is NOT in the future');
    }

})()​
于 2012-11-08T08:58:28.427 に答える
1

私はイエスと思う。を使用してif (now < twitterDate)、に評価されif (now.valueOf()<twitterDate.valueOf())ます。valueOf()1970年1月1日00:00:00から経過したミリ秒数を配信するため、これら2つの数値の比較は有効です。

このようにチェックしてください

var then = new Date("Tue Jan 12 21:33:28 +0000 2010")
   ,now  = new Date;

console.log(then.valueOf(),'::',now.valueOf(),'::',now<then);
  //=> 1263332008000 :: 1352365105901 :: false
于 2012-11-08T08:55:24.837 に答える