我有这样的日期列表:

1994年8月2日,1994年10月31日,1994年12月6日,1994年12月7日,1994年12月8日,1997年2月4日,1997年2月5日,1997年2月6日,1997年2月7日,1997年2月8日,1997年2月9日,1997年2月10日,2月11日1997、1997年2月12日,1997年2月13日,1997年2月14日,1997年2月15日,1997年2月16日,1997年2月17日,1997年2月18日,1997年2月19日,1997年2月20日,1997年2月21日,1997年2月22日,1997年2月23日, 1997年2月24日,1997年2月25日,1997年2月26日,1997年2月27日,1997年2月28日和1997年6月17日

我想将此列表压缩为用户更易理解的内容,如下所示:

1994年8月2日,1994年10月31日,1994年12月6日至8日,1997年2月4日至28日和1997年6月17日

日期已经以秒为单位存储在javascript数组中。我不知道从哪里开始。如果有帮助,我已经在使用moment.js。

有任何想法吗?

最佳答案

您可以这样尝试:
这不是最佳方法,但对您有用

   var dates = ["2nd August 1994", "31st October 1994", "6th December 1994", "7th December 1994", "8th December 1994", "4th February 1997", "5th February 1997", "6th February 1997", "7th February 1997", "8th February 1997", "9th February 1997", "10th February 1997", "11th February 1997", "12th February 1997", "13th February 1997", "14th February 1997", "15th February 1997", "16th February 1997", "17th February 1997", "18th February 1997", "19th February 1997", "20th February 1997", "21st February 1997", "22nd February 1997", "23rd February 1997", "24th February 1997", "25th February 1997", "26th February 1997", "27th February 1997", "28th February 1997", "17th June 1997"];

var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
getDatesInSortedOrder(dates);
function getDatesInSortedOrder(dates){
  //alert($('#test').html());
  var new_dates = [];
  var group_of_dates = {};
  $.each(dates, function( index, value ) {
    var new_val = value.split(" ");
    var dt = new Date(new_val[2], months.indexOf(new_val[1]), new_val[0].slice(0, new_val[0].length - 2))
    new_dates.push(dt)
  });

  $.each(new_dates, function( index, date ) {
    var day = date.getDate(), month = date.getMonth(), year = date.getFullYear();
    date_group = month + "_" + year
    if(group_of_dates[date_group] == undefined){
      group_of_dates[date_group] = [date];
    } else {
      var temp = group_of_dates[date_group];
      temp.push(date)
      group_of_dates[date_group] = temp;
    }
    });
  var sorted_dates = {};

  for (var key in group_of_dates) {
    sorted_dates[key] = sortDate(group_of_dates[key])
  }

  console.log(sorted_dates)
  var finalArray = [];
  for (var key in sorted_dates) {
    var dates_array = sorted_dates[key];
    if (dates_array.length > 1){
      var readableDate = dates_array[0].getDate() + "-" + dates_array[dates_array.length - 1].getDate() + " " + months[dates_array[0].getMonth()]  + " " + dates_array[0].getFullYear();
      finalArray.push(readableDate)
    } else {
      var readableDate = dates_array[0].getDate() + " " + months[dates_array[0].getMonth()]  +" " +  dates_array[0].getFullYear();
      finalArray.push(readableDate)
    }
  }

  alert(finalArray.join(", "))
}


function sortDate(dates){
   new_dates  = dates.sort(function(a,b){
      if (a > b) return 1;
      if (a < b) return -1;
      return 0;
  });
  return new_dates;
}


Jsfiddel

09-25 18:35