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

Sorting JS array by dates DD/MM/YY format

本文关键字:MM YY 格式 DD 日期 JS 数组 排序      更新时间:2023-09-26

我有这种类型的字符串:

12/07/2015 | Comment1, 11/09/2015 | Comment2, 31/07/2015 | Comment3, 30/07/2015 | Comment4,16/07/2015 | Comment5, 09/07/2015 | Comment6。"

我正在努力达到这个结果:

09/07/2015 | Comment6, 12/07/2015 | Comment1, 16/07/2015 | Comment5, 30/07/2015 | Comment4, 31/07/2015 | Comment3, 11/09/2015 | Comment2,

到目前为止,我的代码是这样的:
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)
        }

我的主要目标是安排日期,但这个函数导致:

[星期五7月31日2015 00:00:00 GMT+0300 (FLE日光时间),星期五Sep 11 2015 00:00:00 GMT+0300 (FLE夏令时)->这应该在数组的末尾,因为Sep在Jul之后无效日期,Sun ju7 12 2015 00:00:00 GMT+0300 (FLE夏令时),2015年7月9日星期四00:00:00 GMT+0300 (FLE日光时间),7月16日星期四2015年7月30日星期四2015年00:00:00 GMT+0300(法国夏令时GMT+0300 (le Daylight Time)]

你需要传递一个比较函数给你的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低的索引。
  • compareFunction(a, b)在给定特定的一对元素a和b作为其两个参数时必须始终返回相同的值。如果返回的结果不一致,则排序顺序未定义