Javascript 对字符串日期数组排序

Javascript 对字符串日期数组排序,javascript,jquery,datetime,bootstrap-datepicker,Javascript,Jquery,Datetime,Bootstrap Datepicker,我想按升序对数组排序。日期是字符串格式的 ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"] 甚至需要一个函数来检查这些日期是否连续: eg - Valid - ["09/06/2015", "10/06/2015", "11/06/2015"] Invalid - ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015"] 示例

我想按升序对数组排序。日期是字符串格式的

["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"] 
甚至需要一个函数来检查这些日期是否连续:

eg - Valid   - ["09/06/2015", "10/06/2015", "11/06/2015"] 
     Invalid - ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015"] 
示例代码:

function sequentialDates(dates){
        var temp_date_array = [];

        $.each(dates, function( index, date ) {
            //var date_flag = Date.parse(date);
            temp_date_array.push(date);
        });

        console.log(temp_date_array);

        var last;
        for (var i = 0, l = temp_date_array.length; i < l; i++) {

          var cur = new Date();
          cur.setTime(temp_date_array[i]);
          last = last || cur;
          //console.log(last+' '+cur);

          if (isNewSequence(cur, last)) {
            console.log("Not Sequence");
          }
        }

        //return dates;
    }

     function isNewSequence(a, b) {
          if (a - b > (24 * 60 * 60 * 1000))
              return true;
          return false;
      }
函数顺序日期(日期){
var temp_date_数组=[];
$。每个(日期、函数(索引、日期){
//var date_flag=date.parse(日期);
临时日期数组推送(日期);
});
日志(临时日期数组);
var last;
对于(变量i=0,l=temp\u date\u array.length;i(24*60*60*1000))
返回true;
返回false;
}
var dateRE=/^(\d{2})[\/\-](\d{2})[\/\-](\d{4})/;
功能dmyOrdA(a,b){
a=a.替换(日期,“$3$2$1”);
b=b.替换(日期,“$3$2$1”);
如果(a>b)返回1;
如果(a)b)返回-1;
如果(a)b)返回1;
如果(a)b)返回-1;

如果(a要对日期字符串进行升序排序而不改变其值,请尝试以下操作:

var T = ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"];

var sortedT = T.sort(s1,s2){
    var sdate1 = s1.split('/');
    var sdate2 = s2.split('/');
    var date1 = s1[1]+'/'+s1[0]+'/'+s1[2];
    var date2 = s2[1]+'/'+s2[0]+'/'+s2[2];
    if (Date.parse(date1) > Date.parse(date2)) return 1;
    else if (Date.parse(date1) < Date.parse(date2) return -1;
    else return 0;
}
var T=[“09/06/2015”、“25/06/2015”、“22/06/2015”、“25/07/2015”、“18/05/2015”];
var sortedT=T.sort(s1,s2){
变量sdate1=s1.拆分('/');
var sdate2=s2.split('/');
变量date1=s1[1]+'/'+s1[0]+'/'+s1[2];
var date2=s2[1]+'/'+s2[0]+'/'+s2[2];
如果(Date.parse(date1)>Date.parse(date2))返回1;
否则如果(Date.parse(date1)
结果数组
sortedT
应该是日期字符串的排序数组

注意:


您的日期格式存储在
dd/mm/yyyyy
中,但JavaScript的标准日期格式是
mm/dd/yyyy
。因此,为了在不使用外部日期格式库的情况下将此字符串解析为日期,因此需要在排序期间转换日期字符串以实现兼容性。

您需要将字符串转换为dat,并比较这些日期,如果您想对它们进行排序。您可以使用
sort
方法接受的参数来实现此目的:

var dateStrings = ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"];
var sortedStrings = dateStrings.sort(function(a,b) {
    var aComps = a.split("/");
    var bComps = b.split("/");
    var aDate = new Date(aComps[2], aComps[1], aComps[0]);
    var bDate = new Date(bComps[2], bComps[1], bComps[0]);
    return aDate.getTime() - bDate.getTime();
});
为了减少代码冗余,并处理不同的日期格式,您可以添加一个附加函数,该函数将创建
sort
方法所需的比较器:

function createSorter(dateParser) {
    return function(a, b) {
        var aDate = dateParser(a);
        var bDate = dateParser(b);
        return aDate.getTime() - bDate.getTime();
    };
}

dateStrings.sort(createSorter(function(dateString) {
    var comps = dateString.split("/");
    return new Date(comps[2], comps[1], comps[0]);
}));
然后,通过向
createSorter
调用传递不同的函数,可以使用不同的日期格式化程序

至于第二个问题,您可以从字符串创建一个日期(排序)数组,并在该数组上执行逻辑:

function myDateParser(dateString) {
    var comps = dateString.split("/");
    return new Date(comps[2], comps[1], comps[0]);
}

var sortedDates = dateStrings.map(myDateParser).sort();
您可以遍历
sortedDates
数组,如果您找到两个不连续的日期,那么它们之间就有间隔。

简单的解决方案 不需要将字符串转换为日期或使用RegExp

简单的解决方案是使用Array.sort()方法。sort函数将日期格式设置为YYYYMMDD,然后比较字符串值。假设日期输入的格式为DD/MM/YYYY

data.sort(function(a,b) {
  a = a.split('/').reverse().join('');
  b = b.split('/').reverse().join('');
  return a > b ? 1 : a < b ? -1 : 0;
  // return a.localeCompare(b);         // <-- alternative 
});

您已经有一些代码了吗?使用ISO 8601将日期存储为字符串时,它将为您省去头痛。它将返回[“18/05/2015”、“09/06/2015”、“22/06/2015”、“25/06/2015”、“25/07/2015”]@RobG-谢谢,这是一个很好的建议,我在答案中已经指出了备选方案。@ritesh-如果您的数据包含相同的日期,则您可能需要添加其他排序标准。请参阅此问题:
data.sort(function(a,b) {
  a = a.split('/').reverse().join('');
  b = b.split('/').reverse().join('');
  return a > b ? 1 : a < b ? -1 : 0;
  // return a.localeCompare(b);         // <-- alternative 
});