如何在javascript中将日期列表压缩到范围内?

时间:2016-05-21 10:21:15

标签: javascript date datetime momentjs

我有一个这样的日期列表:

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日,1997年2月11日,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日,23日1997年2月,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日

日期已经在epochseconds中存储在javascript数组中。我不知道从哪里开始这样做。如果有帮助,我已经在使用moment.js了。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试这样: 这不是最好的方法,但它会对你有用

   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

答案 1 :(得分:0)

这是一个想法,您可以将其转换为代码。有两个变量startDateendDate,但尚未分配任何值。将第一个日期放在startDateendDate中。从第2个日期开始,获取当前日期与endDate之间的天数差异。如果差值为1,则将当前值存储在endDate中。继续这样做,直到你达到超过1天的差异。在那一刻,打印startDateendDate的值,并再次定义它们。在完成所有日期之前,请执行此操作。