【问题标题】:How to sort array of dates in Jquery?如何在 Jquery 中对日期数组进行排序?
【发布时间】:2014-07-08 06:11:08
【问题描述】:

我有一个日期数组如下:

var unavailableDates = ["31-5-2014", "1-6-2014", "2-6-2014", "3-6-2014", "26-5-2014", "27-5-2014", "28-5-2014", "29-5-2014"];

如何在不更改日期格式的情况下对该数组进行排序?

【问题讨论】:

标签: jquery sorting date


【解决方案1】:

希望它对你有用,试试这个代码

  var unavailableDates = ["31-5-2014", "1-6-2014", "2-6-2014", 
              "3-6-2014", "26-5-2014", "27-5-2014", "28-5-2014", "29-5-2014"];
    function SortByDate(a, b){
       var amyDate = a.split("-");
       var aNewDate=new Date(amyDate[1]+","+amyDate[0]+","+amyDate[2]).getTime();
       var bmyDate = b.split("-");
       var bNewDate=new Date(bmyDate[1]+","+bmyDate[0]+","+bmyDate[2]).getTime();
       return ((aNewDate < bNewDate) ? -1 : ((aNewDate > bNewDate) ? 1 : 0));
    }
    console.log(unavailableDates.sort(SortByDate));

FIDDLE DEMO

【讨论】:

    【解决方案2】:

    代码不言自明。

    var unavailableDates = ["31-5-2014", "1-6-2014", "2-6-2014", "3-6-2014", "26-5-2014", "27-5-2014", "28-5-2014", "29-5-2014"];
    unavailableDates = unavailableDates
        .map(function (val, idx) {
            var arr = val.split('-');
            return new Date(arr[2], arr[1] - 1, arr[0]);
        })
        .sort(function (x, y) {
            return x > y
        });
    console.log(unavailableDates);
    

    DEMO

    【讨论】:

    • @LeoTAbraham Date 对象的月份从 0 开始。你必须这样做arr[1]-1
    • 我已经试过了。但是现在,6 月 2 日即将到来jsfiddle.net/jXP5D/1
    【解决方案3】:

    此替代方法应该可以正常工作,并且根本不会更改日期格式。 sort 函数使用日期格式YYYYMMDD 仅用于排序,但保留原始日期不变。

    var unavailableDates = ["31-5-2014", "1-6-2014", "2-6-2014", "3-6-2014", "26-5-2014", "27-5-2014", "28-5-2014", "29-5-2014"];
    unavailableDates.sort(function( a, b ) {
        var sA = a.split( '-' ).map(function(v,i) { return (i<2)?("0"+v).substr(-2):v; }).reverse().join(''); 
        var sB = b.split( '-' ).map(function(v,i) { return (i<2)?("0"+v).substr(-2):v; }).reverse().join('');
        return sA > sB;
    })
    console.log( unavailableDates );
    

    JS DEMO

    【讨论】:

      【解决方案4】:
      var eventDates = ["31-5-2014", "1-6-2014", "2-6-2014", "3-6-2014", "26-5-2014", "27-5-2014", "28-5-2014", "29-5-2014"];
                 
      var result = data.sort(function (a, b){ new Date(a.eventDates).getTime() - new Date(b.eventDates).getTime()
      });
      
      console.log(result);
      

      【讨论】:

      • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。
      • 错字:data.sort 应该是eventDates.sort
      猜你喜欢
      • 1970-01-01
      • 2017-03-20
      • 2023-03-04
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多