いくつかの奇妙な理由で、日付文字列の配列を JavaScript 日付オブジェクトに変換し、それらを並べ替えてから、並べ替えられた日付文字列の配列を返すために私が書いた次の関数は、正しく並べ替えられません。
sortdates: function(dates, separator) {
var sorteddates = [],
datestr =[];
sorteddates = dates.map(function(val) {
return new Date(val.replace("/"+separator+"/g", " "));
}).sort();
for ( i=0; i<sorteddates.length; i++ ) {
datestr.push((sorteddates[i].getMonth()+1) + "-" + sorteddates[i].getDate() + "-" + sorteddates[i].getFullYear());
}
return datestr;
}
日付文字列のテスト配列を作成し、この関数を適用すると:
var testarray = ["2013-8-1", "2013-8-8", "2013-8-15", "2013-8-22", "2013-9-5", "2013-9-12", "2013-8-2", "2013-8-3", "2013-8-4", "2013-8-7", "2013-8-11", "2013-8-14", "2013-8-18", "2013-8-25"];
console.log(sortdates(testarray, "-"));
コンソールに次のログが記録されます。
["8-2-2013", "8-3-2013", "8-4-2013", "8-11-2013", "8-18-2013", "8-25-2013", "8-1-2013", "8-8-2013", "8-15-2013", "8-22-2013", "9-5-2013", "9-12-2013", "8-7-2013", "8-14-2013"]
明らかにソートされていません。