Javascript 在时间跨度内对日期进行分组

Javascript 在时间跨度内对日期进行分组,javascript,Javascript,我试着在一个小时内把日期分组。然而,有些日期似乎被排除在外。我错过了什么?预期结果是[[date1,date2],[date3],[date4]] function groupDates(dates) { var result = []; var intervalStart = dates[0]; var grp = [] dates.forEach((d,i) => { var diff = d.getTime() - intervalStart.getTime(

我试着在一个小时内把日期分组。然而,有些日期似乎被排除在外。我错过了什么?预期结果是
[[date1,date2],[date3],[date4]]

function groupDates(dates) {
  var result = [];
  var intervalStart = dates[0];
  var grp = []
  dates.forEach((d,i) => {
    var diff = d.getTime() - intervalStart.getTime()
    if(diff/1000/60 <= 60) {
      grp.push(d)
    } else { 
      intervalStart = date;
      grp = [d]
      result.push(grp)
    }
  })
  return result
}

console.log(groupDates([new Date('2017-01-01 17:24'), 
    new Date('2017-01-01 17:25'), 
    new Date('2017-01-01 18:26'), 
    new Date('2017-01-01 19:27')]))
函数组日期(日期){
var结果=[];
var intervalStart=日期[0];
var grp=[]
日期。forEach((d,i)=>{
var diff=d.getTime()-intervalStart.getTime()

if(diff/1000/60问题出在
else
块中。您检测到当前组应该结束,但在将其推送到
结果
数组之前放弃它

移动
result。将(grp)
行推到
else
块的顶部,并添加一个额外的
result。在循环后推(grp)
,以处理最后一组

function groupDates(dates) {
  var result = [];
  var intervalStart = dates[0];
  var grp = [];
  dates.forEach((d,i) => {
    var diff = d.getTime() - intervalStart.getTime();
    if(diff/1000/60 <= 60) {
      grp.push(d);
    } else {
      result.push(grp);
      intervalStart = d;
      grp = [d];
    }
  })
  result.push(grp);
  return result;
}

console.log(groupDates([new Date('2017-01-01 17:24'), 
    new Date('2017-01-01 17:25'), 
    new Date('2017-01-01 18:26'), 
    new Date('2017-01-01 19:27')]));
函数组日期(日期){
var结果=[];
var intervalStart=日期[0];
var-grp=[];
日期。forEach((d,i)=>{
var diff=d.getTime()-intervalStart.getTime();

if(diff/1000/60问题出在
else
块中。您检测到当前组应该结束,但在将其推送到
结果
数组之前放弃它

移动
result。将(grp)
行推到
else
块的顶部,并添加一个额外的
result。在循环后推(grp)
,以处理最后一组

function groupDates(dates) {
  var result = [];
  var intervalStart = dates[0];
  var grp = [];
  dates.forEach((d,i) => {
    var diff = d.getTime() - intervalStart.getTime();
    if(diff/1000/60 <= 60) {
      grp.push(d);
    } else {
      result.push(grp);
      intervalStart = d;
      grp = [d];
    }
  })
  result.push(grp);
  return result;
}

console.log(groupDates([new Date('2017-01-01 17:24'), 
    new Date('2017-01-01 17:25'), 
    new Date('2017-01-01 18:26'), 
    new Date('2017-01-01 19:27')]));
函数组日期(日期){
var结果=[];
var intervalStart=日期[0];
var-grp=[];
日期。forEach((d,i)=>{
var diff=d.getTime()-intervalStart.getTime();
如果(diff/1000/60看起来您想要进行小时级别分组,请尝试

var-inputArr=[新日期('2017-01-01 17:24'),
新日期('2017-01-01 17:25'),
新日期('2017-01-01 18:26'),
新日期('2017-01-01 19:27');
var output=Object.values(inputArr.reduce(函数a,b){
var日期=新日期(b);
date.setHours(date.getHours(),0,0,0);
var time=date.getTime()
a[date.getTime()]=a[date.getTime()]||[];
a[date.getTime()].push(b);
返回a;
}, {}));
console.log(输出);
看起来您想进行小时级分组,请尝试

var-inputArr=[新日期('2017-01-01 17:24'),
新日期('2017-01-01 17:25'),
新日期('2017-01-01 18:26'),
新日期('2017-01-01 19:27');
var output=Object.values(inputArr.reduce(函数a,b){
var日期=新日期(b);
date.setHours(date.getHours(),0,0,0);
var time=date.getTime()
a[date.getTime()]=a[date.getTime()]||[];
a[date.getTime()].push(b);
返回a;
}, {}));

console.log(输出);
您的else子句中有错误:intervalStart=d,而不是date。您的else子句中有错误:intervalStart=d,而不是date。