从 Javascript 的日期集合中查找日期范围



我知道这类似于这个问题,但我需要不同的结果和JavaScript。

我有一串这样的日期,可能不按顺序排列。

2017/03/27,2017/03/28,2017/03/29,2017/04/04,2017/04/05,2017/04/06,04/12/2017,04/13/2017,04/14/2017, 05/02/2017日期格式为月/日/年

我需要将其拆分为一个日期数组,我可以这样做。但是我需要遍历所有日期,如果日期已连接,则需要它是一个日期范围。如果只有一个日期,那么它将是一个日期范围。

所以我需要上述日期的这些结果。

[
{'start': 03/27/2017, 'end': 03/29/2017 }, 
{'start': 04/04/2017, 'end': 04/06/2017}, 
{'start': 04/12/2017, 'end': 04/14/2017 }, 
{'start': 05/02/2017, 'end': 05/02/2017}
]

我正在用JavaScript,Typescript,lodash,angular 1.6做这个应用程序。

任何帮助将不胜感激。

编辑

我有一个弹出日历,用户可以选择多个日期。如果日期是连续的,那么这就是日期范围,如果是单个日期,那么这个将是日期范围。这是用户选择所需日期所必需的,然后将这些日期插入到数据库中。

这是我是如何做到的。我将它们转换为日期,然后进行数学计算,看看下一个日期是否大于一天。如果是,那么我停止了当前日期范围并开始下一个日期范围。

let string = '03/27/2017,03/28/2017,03/29/2017,04/04/2017,04/05/2017,04/06/2017,04/12/2017,04/13/2017,04/14/2017, 05/02/2017';
//split them and pull out any white spaces from beginning and end
let dates = string.split(',').map(s=>{
s = s.trim();
let nums = s.split('/');
let d = new Date(nums[2], nums[0], nums[1]);
return {date:d, string: s};
});
let currentStart = dates[0];
let result = [];
for(let i = 1; i < dates.length; i++){
let {date, string} = dates[i];
//If last date, add range
if(i == dates.length -1){
console.log("hello");
result.push({start: currentStart.string ,end: string});
} else {
let prevDate = dates[i-1] || currentStart; //in case prevDate is undefined
let nextDate = dates[i+1];
let diff = nextDate.date.getTime() - date.getTime();
if(diff > (24 * 60 * 60 * 1000)){
result.push({start: currentStart.string ,end: string});
currentStart = nextDate;
}
}
}
console.log(result, 'result');

最新更新