首页 > 解决方案 > 按日期分组的问题

问题描述

我有一个计时器列表,例如

timer 1 => { startDate = 17/01/2019 11PM, endDate = 18/01/2019 9AM } 
timer 2 => { startDate = 18/01/2019 7AM, endDate = 18/01/2019 1PM } 
timer 3 => { startDate = 18/01/2019 12PM, endDate = 18/01/2019 10PM } 
timer 4 => { startDate = 18/01/2019 11PM, endDate = 19/01/2019 9AM }

我需要用这个逻辑按日期分组。

  1. 计时器 1 从 2019 年 1 月 17 日晚上 11 点开始,到第二天结束。此计时器应归入 2019 年 1 月 17 日(1 个计时器)
  2. 计时器 2 和计时器 3 位于 2019 年 1 月 18 日,这应分组在 2019 年 1 月 18 日(2 个计时器)
  3. 计时器 4 从 18 开始,到 19 结束,应归入 19/01/201(1 个计时器)

代码:

let sortedTimers = timers.sort((a, b) => {
     return a.startDate.isBefore(b.startDate) ? -1 : 1;
});        
let groupedByDate: { [date: string]: Timer[] } = _.groupBy(sortedTimers, timer => {
    let start = this.dateFormatter.toDayOfWeekLongDate(Timer.startDate);
    let end = this.dateFormatter.toDayOfWeekLongDate(Timer.endDate);
    return start == end? start:end; // wrong logic
});

这个只返回两组 1. 18/01/2019(3 个计时器) 2. 19/01/201(1 个计时器)但我需要三组。我知道上面代码中的逻辑是错误的。

我正在使用 lodash 进行分组。任何线索将不胜感激。谢谢。

标签: javascriptangulartypescript

解决方案


您需要在条件中添加当前日期,因为您的逻辑也考虑了当前日期,即 if(start == end) return start elseif(start < end & end==currDate) return start elseif(start < end & end >currDate) return end 有这样的效果。


推荐阅读