2016-04-04 89 views
1

我有一個類的數組和他們提供的日期從AJAX返回到PHP調用。它的返回爲「數據」,所以我們只需撥打我們的陣列中的數據:JavaScript按年排序日期DESC,然後月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

一旦您完成了日期的情況下,你可以使用[日期API(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)提取年份('.getFullYear()'),月份('.getMonth()'),月份日期('.getDate()')等。 – Pointy

+0

這是我最初的想法,但我我真的很難搞清楚如何在函數中實際寫出它。這就是我需要它做的,就是。 –

+1

固定小提琴:https://jsfiddle.net/ts5mks95/它將開始按年份排序(降序),然後如果它們相等,按月排序(升序),那麼如果它們相等,則按照月份(升序)。 – blex

回答

2

喲可以拆分數據並按年份desc,月份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" }, { "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,...總是有一個更短的正則表達式...... :) –

相關問題