2016-06-27 21 views
-1

で日付を並べ替え(クローム、サファリ、またはNodeJSで実行されている)Javascriptが一見間違ってこれらの日付をソートし、なぜ私が理解することはできません。Javascriptが間違った順序

> [ 
     "2014-05-01T08:06:00.000Z", 
     "2014-05-01T06:26:00.000Z", 
     "2014-05-01T06:27:00.000Z" 
    ].map(function(x) {return new Date(x)}).sort() 

[ Thu May 01 2014 01:06:00 GMT-0700 (PDT), 
    Wed Apr 30 2014 23:26:00 GMT-0700 (PDT), 
    Wed Apr 30 2014 23:27:00 GMT-0700 (PDT) ] 

Iを生成その日の奇妙な時間の変化を探したが、何も見つけることができない。

+0

結果値がために閉鎖する。.. – Rayon

+0

投票入力配列には存在しません生成されます 'この質問はもはや再現できる問題や単純なタイプミスによって引き起こされました。同様の質問がここで話題になるかもしれないが、これは将来の読者を助けるような形で解決された。」行動は問題の方法について明確に文書化されている。 – rockerest

+0

@ T.J.Crowderありがとう。投稿する前にコンパレータを使いましたが、今は間違いがありました。 – slund

答えて

2

単にsortメソッドを呼び出すと、基本的に文字列の比較に基づいてソートされます。だから、日付オブジェクトに基づいてソートするには、カスタムソート機能を使用します。

console.log(
 
    [ 
 
    "2014-05-01T08:06:00.000Z", 
 
    "2014-05-01T06:26:00.000Z", 
 
    "2014-05-01T06:27:00.000Z" 
 
    ].map(function(x) { 
 
    return new Date(x) 
 
    }).sort(function(a, b) { 
 
    return a - b; 
 
    }) 
 
)


あなたが元の配列をソートしたい場合は、map方法を避け、比較関数内で差分を取る前に、日付文字列を解析します。

console.log(
 
    [ 
 
    "2014-05-01T08:06:00.000Z", 
 
    "2014-05-01T06:26:00.000Z", 
 
    "2014-05-01T06:27:00.000Z" 
 
    ].sort(function(a, b) { 
 
    return new Date(a) - new Date(b); 
 
    }) 
 
)

+1

種類の答えをありがとう!私は仕様を再読み込みするときに明白に見えるものがなくなってしまったと思っていますが、ここに投稿するまで間違ったトラックに間違いがありませんでした。 – slund

+0

ありがとう!私はオペレータの代わりに<オペレータを使用して、奇妙な結果を得ようとしていました。 – stealthysnacks

0

Array.prototype.sort標的配列をソートするnegativepositive又はzero値を返すことができるコールバックを取ります。

[ 
    "2014-05-01T08:06:00.000Z", 
    "2014-05-01T06:26:00.000Z", 
    "2014-05-01T06:27:00.000Z" 
].sort(function(a, b){ 
    return (new Date(b) - new Date(a)); 
}) 
関連する問題