2013-04-15 76 views
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'])); 

     return (aDate < bDate) ? -1 : (aDate > bDate) ? 1 : 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

+0

感谢这个:-) – Jerome

+0

完美地工作。如果你的问题就解决了,你介意[接受回答?(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

1

返回值将告诉系统您想要的顺序。

如果你想两个相同日期的事件进行排序只是不上的排序函数返回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; 
    } 
} 
相关问题