按日期DD / MM / YY格式对JS数组进行排序

时间:2015-07-21 07:32:46

标签: javascript sorting date

我有这种刺痛:

2015年12月7日| Comment1,11 / 09/2015 | Comment2,31 / 07/2015 | Comment3,30 / 07/2015 | Comment4,  16/07/2015 | Comment5,09 / 07/2015 | Comment6,“

我试图取得这个结果:

2015年9月7日| Comment6,12 / 07/2015 | Comment1,16 / 07/2015 | Comment5,30 / 07/2015 | Comment4,31 / 07/2015 | Comment3,11 / 09/2015 |注释2 ,

到目前为止我的代码看起来像这样:

function rearangeDates(old_order){

            var list = old_order.split(',');
            list = list
                .map( // for each element in the list (each date)
                function(val,idx){
                    // use the first part(before the dot(.)), replace the - with spaces and convert to date
                  console.log(val.split('|')[0].split("/").join("-"))
                    return new Date(val.split('|')[0].split("/").join("-").replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
                })
                .sort(); // at the end sort the results.
        console.log(list)
        }

我的主要目标是安排日期,但此功能会导致:

  

[2015年7月31日星期五00:00:00 GMT + 0300(FLE白天时间),        2015年9月11日星期五00:00:00 GMT + 0300(FLE白天时间) - >这应该是数组的末尾,因为9月是7月之后无效日期,2015年7月12日星期日00:00:00 GMT + 0300(FLE白天时间),   2015年7月9日星期四00:00:00 GMT + 0300(FLE白天时间),7月16日星期四   2015 00:00:00 GMT + 0300(FLE白天时间),2015年7月30日星期四00:00:00   GMT + 0300(FLE日光时间)]

1 个答案:

答案 0 :(得分:1)

您需要将比较功能传递给sort

.sort(function(a, b){
    return a.getTime() - b.getTime();
})

这应该按照正确的顺序对日期进行排序。

然后sort将根据此函数的返回值对2个传递的值进行排序:

  
      
  • 如果compareFunction(a, b)小于0,则将a排序为低于b的索引,即a先出现。
  •   
  • 如果compareFunction(a, b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
  •   
  • 如果compareFunction(a, b)大于0,则将b排序为低于。
  • 的索引   当给定一对特定元素a和b作为其两个参数时,
  • compareFunction(a, b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义
  •