我正在尝试对从最新到最旧的日期数组进行排序,不幸的是list.sort(默认情况下)只对第一个数字进行排序。我的数组看起来像这样:
var MyArray = ["13 Jun", "09 Jun", "25 Aug", "30 Jun", "13 Aug"];
我试图为.sort创建一个函数来引用,但整个过程对我来说有点混乱。任何人都可以帮我吗?
答案 0 :(得分:5)
你必须将字符串解析为 Date()对象,如果它不是因为IE的日期字符串解析的不良实现,这将是非常简单的。幸运的是,您可以在浏览器中使用 setDate()和 setMonth(),两者都接受数字 - setDate()为1-31, 0-11表示 setMonth()。为月份名称设置对象图将有所帮助。
这对我有用:
(function () {
// Set up our variables, 2 date objects and a map of month names/numbers
var ad = new Date(),
bd = new Date(),
months = {
Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5,
Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov:10, Dec:12
};
MyArray.sort(function (a,b) {
// Split the text into [ date, month ]
var as = a.split(' '),
bs = b.split(' ');
// Set the Date() objects to the dates of the items
ad.setDate(as[0]);
ad.setMonth(months[as[1]]);
bd.setDate(bs[0]);
bd.setMonth(months[bs[1]]);
/* A math operation converts a Date object to a number, so
it's enough to just return date1 - date2 */
return ad - bd;
});
})();
//-> ["09 Jun", "13 Jun", "30 Jun", "13 Aug", "25 Aug"]
我为您设置了一个示例 - http://jsfiddle.net/Tw6xt/
答案 1 :(得分:0)
您可以传递一个函数进行排序以进行自定义排序:
function sortDate (a,b) {
var aa = a.split(' ');
var bb = b.split(' ');
var months = {
Jan : 1,
Feb : 2,
Mar : 3 /* you do the rest ... */
}
if (months[a[1]] > months[b[1]]) return 1;
if (months[a[1]] < months[b[1]]) return -1;
return parseInt(a[0],10) - parseInt(b[0],10);
}
MyArray.sort(sortDate);
答案 2 :(得分:0)
您必须将排序函数传递给sort方法并定义日期解析函数,以创建日期的有序表示,如下所示:
var MyArray = ["13 Jun", "09 Jun", "25 Aug", "30 Jun", "13 Aug"];
MyArray.sort(function (a, b) {
a = parseDate(a);
b = parseDate(b);
if (a < b) {
return 1;
} else if (a > b) {
return -1;
} else {
return 0;
}
});
答案 3 :(得分:-1)
这是一个不回复任何常量的解决方案。
var MyArray = ["13 Jun", "09 Jun", "25 Aug", "30 Jun", "13 Aug"];
var DateArray = [];
var SortedArray = [];
var dateBits;
for (var index = 0; index < MyArray.length; index++) {
DateArray.push(new Date(MyArray[index] + " 2000"));
}
SortedArray = DateArray.sort();
MyArray = [];
for (var index = 0; index < SortedArray.length; index++) {
dateBits = SortedArray[0].toDateString().substr(4, 6).split(" ");
MyArray[index] = dateBits[1] + " " + dateBits[0];
}