【问题标题】:Sorting JS array by dates DD/MM/YY format按日期 DD/MM/YY 格式对 JS 数组进行排序
【发布时间】:2015-07-21 07:32:46
【问题描述】:

我有这种刺痛:

12/07/2015|评论1,11/09/2015|评论2,31/07/2015|评论3,30/07/2015|评论4, 2015 年 7 月 16 日|评论 5,09/07/2015|评论 6,”

我正在努力实现这个结果:

09/07/2015|评论 6,12/07/2015|评论 1,16/07/2015|评论 5,30/07/2015|评论 4,31/07/2015|评论 3,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 夏令时)]

【问题讨论】:

  • @Yetti99: split 也可以将字符串作为参数。

标签: javascript sorting date


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

【讨论】:

  • 谢谢。像魅力一样工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2011-04-18
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
相关资源
最近更新 更多