2016-04-04 24 views
1

私はクラスの配列を持っていて、AJAXからPHPへの呼び出しから戻ってきました。Javascriptソートの日付は配列DESC、ASC、ASC、日ASC

var data = [{ 
    "course": "First Aid", 
    "courseDate": "2016-04-25T00:00:00-06:00" 
}, { 
    "course": "CPR", 
    "courseDate": "2016-04-06T00:00:00-06:00" 
}, { 
    "course": "ASL1", 
    "courseDate": "2016-01-07T00:00:00-06:00" 
}, { 
    "course": "ASL2", 
    "courseDate": "2016-03-25T00:00:00-06:00" 
}, 
...etc... 
]; 

私は日付の降順でソートして表示できるようにする必要があります:私たちは私たちの配列データを呼び出します「データ」として返されます。私はこの簡単な関数使用しています:予想通り

data.sort(function(a, b) { 
    a = new Date(a.courseDate); 
    b = new Date(b.courseDate); 
    return a > b ? -1 : a < b ? 1 : 0; 
}); 

$.each(data, function(key, val) { 
    $('#courseHist').append('<br />' + val.course+' - '+val.courseDate); 
}); 

を、私は、技術的には、日付の降順でソートされ

1st Aid - 2016-04-25... 
CPR - 2016-04-06... 
ASL2 - 2016-03-25... 
ASL1 - 2015-12-07... 

のリターンを得ています。しかし、私は年を降順に並べ替える必要があります。そして、月を昇順、昇順に並べ替える必要があります。このように:

ASL2 - 2016-03-25... 
CPR - 2016-04-06... 
1st Aid - 2016-04-25... 
ASL1 - 2015-12-07... 

私は私の日がチャンクに戻る分解し、そこから配置する必要があるが、私はちょうどそれを行う方法のまわりで私の頭をラップすることはできません知っています。どんな助けでも大歓迎です!

誰かが解決策を持っていれば、代わりにPHP側でやり遂げることができます。

私はあなたがそれを混乱させたい場合は、HEREを持っています。 - ユーザーのblexの作業コードで更新されました

+0

あなたはDateインスタンスを加えたら、[日付API]を使用することができます(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference ( '.getMonth()')、月の日( '.getDate()')などを抽出するために使用します。 – Pointy

+0

これは私の最初の考えでしたが、関数で実際にそれを書く方法を考え出すのは本当に苦労しています。それが私に必要なことです。 –

+1

Fiddleを修正しました:https://jsfiddle.net/ts5mks95/これは、年別(降順)でソートしてから、等しければ月単位でソートし(昇順)、等しければソートします月(昇順)。 – blex

答えて

2

Yoは、データを分割して年desc、月asc、day ascごとに独立してソートできます。

var data = [{ "course": "First Aid", "courseDate": "2016-04-25T00:00:00-06:00" }, { "course": "CPR", "courseDate": "2016-04-06T00:00:00-06:00" }, { "course": "ASL1", "courseDate": "2016-01-07T00:00:00-06:00" }, { "course": "ASL2", "courseDate": "2016-03-25T00:00:00-06:00" }, { "course": "ASL2X", "courseDate": "2015-03-25T00:00:00-06:00" }]; 
 

 
data.sort(function (a, b) { 
 
    var aa = a.courseDate.split(/\D/), 
 
     bb = b.courseDate.split(/\D/); 
 
    return bb[0] - aa[0] || aa[1] - bb[1] || aa[2] - bb[2]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

+1

クリーナーでさえ!ニース。ありがとう。 –

+1

'split(/ \ D /)'を使うことができます。* g *フラグは必要ありません。 3文字を保存しました! ;-) – RobG

+0

@ RobG、...常に短い正規表現があります:) –

関連する問題