2016-02-19 15:42:10 -06:00
|
|
|
class DateRange {
|
2016-02-19 10:49:07 -06:00
|
|
|
|
|
|
|
|
static addRange(new_range, ranges){
|
|
|
|
|
var gaps_filled = [], new_ranges = [],
|
|
|
|
|
start = new_range[0], end = new_range[1];
|
|
|
|
|
if (start === undefined && end === undefined && ranges.length === 0){
|
|
|
|
|
gaps_filled = [undefined, undefined];
|
|
|
|
|
new_ranges = [[undefined, undefined]];
|
|
|
|
|
} else if (ranges.length === 0){
|
|
|
|
|
gaps_filled = [new_range];
|
|
|
|
|
new_ranges = [new_range]
|
|
|
|
|
} else {
|
|
|
|
|
var covered = false,
|
|
|
|
|
last_start = start,
|
|
|
|
|
last_end = start;
|
|
|
|
|
|
|
|
|
|
ranges.forEach((range, i)=>{
|
|
|
|
|
if (covered){ new_ranges.push(range); return true; }
|
|
|
|
|
if (DateUtil.lte(start, range[0])){
|
|
|
|
|
if (end && !DateUtil.eq(end, range[0]) && DateUtil.lte(end, range[0])){
|
|
|
|
|
new_ranges.push([last_start, end]);
|
|
|
|
|
new_ranges.push(range);
|
|
|
|
|
gaps_filled.push([last_end, end]);
|
|
|
|
|
covered = true;
|
|
|
|
|
} else if (end && !DateUtil.gte(end, range[1])) {
|
|
|
|
|
new_ranges.push([last_start, range[1]]);
|
|
|
|
|
if (range[0] && !DateUtil.eq(last_end, range[0])){ gaps_filled.push([last_end, range[0]]); }
|
|
|
|
|
covered = true
|
|
|
|
|
} else {
|
|
|
|
|
if (range[0] && !DateUtil.eq(last_end, range[0])) gaps_filled.push([last_end, range[0]]);
|
|
|
|
|
last_end = range[1]
|
|
|
|
|
}
|
|
|
|
|
} else if (start && DateUtil.gte(range[1], start)){
|
|
|
|
|
if (!DateUtil.eq(end, range[1]) && DateUtil.gte(end, range[1])){
|
|
|
|
|
last_start = range[0];
|
|
|
|
|
last_end = range[1];
|
|
|
|
|
} else {
|
|
|
|
|
new_ranges.push(range);
|
|
|
|
|
covered = true;
|
|
|
|
|
}
|
|
|
|
|
} else { new_ranges.push(range); }
|
|
|
|
|
});
|
|
|
|
|
if (!covered) {
|
|
|
|
|
new_ranges.push([last_start, end]);
|
|
|
|
|
if (!DateUtil.eq(last_end, end)) gaps_filled.push([last_end, end]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return { gaps_filled: gaps_filled, new_ranges: new_ranges }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gte(date1, date2){
|
|
|
|
|
return (date1 === undefined || (date2 !== undefined && date1 >= date2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static lte(date1, date2){
|
|
|
|
|
return (date1 === undefined || (date2 !== undefined && date1 <= date2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static eq(date1, date2){
|
|
|
|
|
return (date1 !== undefined && date2 !== undefined && date1.getTime() === date2.getTime()) || date1 === undefined && date2 === undefined
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static add(date, s){
|
|
|
|
|
return new Date(date.getTime() + s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
export default DateUtil;
|