2016-04-04 14 views
1

Bir dizi dersim var ve bir AJAX'tan PHP çağrısına geri geldikleri tarihler var. Onları Tarihi büyükten göre sınıflandırılmaktadır gösterilecek gerekiyorJavascript sıralama tarihleri ​​dizilişine göre DESC, sonra ay ASC, sonra gün 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... 
]; 

: Biz sadece bizim dizi verilerini diyeceğiz yüzden 'veriler' olarak döndürülür. Ben bu basit işlevi kullanıyorum:

Beklendiği gibi
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); 
}); 

, ben teknik, tarih azalan sıralama kriteri olan

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

bir dönüş alıyorum. Ancak, azalan aya göre azalarak, sonra artan ay, sonra da artan tarihe ihtiyacım var. Şunun gibi:

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

benim tarih parçalar içine dönmek ve oradan düzenlemek ama sadece bunu nasıl etrafında başımı sarmak olamaz kırmak gerektiğini biliyorum. Herhangi bir yardım büyük beğeni topluyor!

Alternatif olarak, bunun için bir çözümü varsa, bunu PHP tarafında yapabilirim.

Karıştırmak istiyorsanız, bir HERE keman var. - Kullanıcı kodunun kullanıcı kodundan güncellenir.

+0

Eğer tarihi örneklerini yaptıktan sonra, [Tarih API] kullanabilirsiniz (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) yılı ayıklamak için ('.getFullYear()'), ay ('.getMonth()'), ayın günü ('.getDate()'), vb – Pointy

+0

Bu benim ilk düşüncem vardı ama ben Gerçekten bir fonksiyona nasıl yazılacağını anlamaya gerçekten zor bir zaman geçiriyorum. Bunu yapmak için ihtiyacım olan şey budur. –

+1

Sabit Fiddle: https://jsfiddle.net/ts5mks95/ Yıllara göre sıralayarak başlayacak (azalan), o zaman eşitse, aylara göre sıralama (artan), o zaman eşitse, onları güne göre sıralayın ay (artan). – blex

cevap

2

Verileri ayırabilir ve yıl bazında, ay cinsinden ve gün bazında bağımsız olarak ayırabilirsiniz.

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

Daha da temiz! Güzel. Teşekkürler. –

+1

Bölme (/ \ D /) 'yapamazsınız, * g * bayrağına gerek yoktur. 3 karakter kaydedildi! ;-) – RobG

+0

@RobG, ... her zaman daha kısa bir regex var ... :) –

İlgili konular