按日期排序然后按位置排序

时间:2013-04-15 15:49:53

标签: javascript function datetime

我有一个用于按日期对事件进行排序的函数:

function SortByDateAsc() {

    return function (a,b) {

        var aDate = new Date(new Date(a['Month'] +" "+ a['Day']+ " "+ a['Year']));
        var bDate = new Date(new Date(b['Month'] +" "+ b['Day']+ " "+ b['Year']));

        return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : 0;

    }
}

如果我想按日期排序,那么按位置排序,例如我在同一日期有两个结果,但它们位于两个不同的位置。我如何按字母顺序添加要排序的位置?

所以我的最终结果应该是日期加上按字母顺序排列的位置??

2 个答案:

答案 0 :(得分:3)

在返回0之前,为该位置添加类似的检查。此外,创建日期的方式也少得多。

function SortByDateAsc() {
  return function (a,b) {
    // the month-1 is because Date months are 0-indexed, which
    // might not be necessary if your months are already 0-indexes
    var aDate = new Date(a.Year, a.Month-1, a.Day).getTime();
    var bDate = new Date(b.Year, b.Month-1, b.Day).getTime();

    return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : someLocationComparator(a,b);
  }
}

好好阅读the Date docs

答案 1 :(得分:1)

返回值将告诉系统您想要的订单。

如果要对两个相同日期的事件进行排序,则不要在sort函数上返回0:

function SortByDateAsc() {
    return function (a,b) {

        var aDate = new Date(new Date(a['Month'] +" "+ a['Day']+ " "+ a['Year']));
        var bDate = new Date(new Date(b['Month'] +" "+ b['Day']+ " "+ b['Year']));

        var diff = aDate - bDate;
        if (diff !== 0)
            return diff;

        return (a.location < b.location) ? -1 : (a.location > b.location) ? 1 : 0;
    }
}
相关问题