【问题标题】:How Sort Array Date JavaScript dd/mm/yyyy?JavaScript dd/mm/yyyy 如何排序数组日期?
【发布时间】:2014-05-29 20:53:16
【问题描述】:

如何按时间顺序对日期数组进行排序?例如我有:

var dates = [
    '03/03/2014',
    '01/03/2014',
    '02/03/2014',
    '04/03/2014'
];

sortDates = sortDate(dates);

sortDate(array){
    // ?
    returnt arraySort;
}

我希望得到的数组看起来像:

[
    '01/03/2014', 
    '02/03/2014',
    '03/03/2014', 
    '04/03/2014'
]

【问题讨论】:

    标签: javascript arrays sorting date


    【解决方案1】:

    只是改进@leaf 答案,因为拆分适用于字符串,因此如果“a”和“b”的类型是对象,您可能会出错。

    dates.sort(function (a, b) {
            a = a.toString().split('/');
            b = b.toString().split('/');
            return a[2] - b[2] || a[1] - b[1] || a[0] - b[0];
        });
    

    【讨论】:

      【解决方案2】:

      请以简单的方式进行操作。
      适用于格式为“dd/mm/yy”或“dd/mm/yyyy”的日期。

      var dates = [
          '03/03/2014',
          '01/03/2014',
          '02/03/2014',
          '04/03/2014'
      ];
      
      dates.sort( function(c,d){
          var rx = /(\d+)\/(\d+)\/(\d+)/;
          var a = Number(c.replace(rx, '$3$1$20000'));
          var b = Number(d.replace(rx, '$3$1$20000'));
          return a > b ? -1 : a == b ? 0 : 1; // for newer on top
          //return a < b ? -1 : a == b ? 0 : 1; // for older on top
        });
      

      【讨论】:

        【解决方案3】:

        Digigizmo 答案有效!

        如果:dd/mm/yyyy hh:mm:ss 你可以使用:

        list.sort(function (a, b) {
            var aa = a.substring(0, 10).split('/').reverse().join() + replaceAll(':', '', a.substring(11, 20)),
            bb = b.substring(0, 10).split('/').reverse().join() + replaceAll(':', '', b.substring(11, 20));
            return aa < bb ? -1 : (aa > bb ? 1 : 0);
        });
        

        和replaceAll功能:

        function replaceAll(find, replace, str) {
          return str.replace(new RegExp(find, 'g'), replace);
        }
        

        【讨论】:

          【解决方案4】:

          试试这个(欢迎询问详情):

          dates.sort(function (a, b) {
              // '01/03/2014'.split('/')
              // gives ["01", "03", "2014"]
              a = a.split('/');
              b = b.split('/');
              return a[2] - b[2] || a[1] - b[1] || a[0] - b[0];
          });
          

          最后一行的翻译:

          return          return
          a[2] - b[2]     years comparison if year A - year B is not 0
          ||              or
          a[1] - b[1]     months comparison if month A - month B is not 0
          ||              or
          a[0] - b[0];    days comparison
          

          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort.

          【讨论】:

            【解决方案5】:

            假设您的日期格式始终为DD/MM/YYYY

            dates.sort(function(a, b){
                var aa = a.split('/').reverse().join(),
                    bb = b.split('/').reverse().join();
                return aa < bb ? -1 : (aa > bb ? 1 : 0);
            });
            

            ...否则,如果您需要更大的灵活性,则必须比较 Date 对象。

            【讨论】:

            • 这工作正常..但是我的日期是 MM/DD/YYYY 格式,如果我创建两个具有相同日期的数据,那么它不起作用。请帮忙。
            • 此线程中已经有针对您的具体情况的答案。值得注意的是this one - 您需要做的就是交换索引10 之间的比较顺序。事实上,无论哪种情况,这都是对我的改进。
            猜你喜欢
            • 2014-05-30
            • 1970-01-01
            • 2018-03-31
            • 2012-08-13
            • 2016-01-02
            • 1970-01-01
            • 1970-01-01
            • 2014-11-25
            相关资源
            最近更新 更多