#<Sentry::ErrorEvent:0x00007fee7d4323d0>
JavaScript
const arranged_shifts = [{
'start_time' : '08:00',
'finish_time' : '10:00'
},
{
'start_time' : '10:30',
'finish_time' : '16:00'
},
{
'start_time' : '17:00',
'finish_time' : '18:00'
},
{
'start_time' : '19:00',
'finish_time' : '20:00'
}];
const absences = [{
'start_time' : '09:00',
'finish_time' : '09:30'
},
{
'start_time' : '11:00',
'finish_time' : '12:30'
},
{
'start_time' : '17:30',
'finish_time' : '18:00'
}
];
const available_times = [],
add_time = (start_time, finish_time) => {
available_times.push({
'start_time' : start_time,
'finish_time' : finish_time
});
};
const get_time_difference = (a_time, b_time) => {
return Date.parse('1970/01/01 ' + a_time) - Date.parse('1970/01/01 ' + b_time);
};
absences_loop : for (const absence of absences){
shift_loop : for (const arranged_shift of arranged_shifts){
const start_time_difference = get_time_difference(arranged_shift.start_time, absence.start_time),
finish_time_difference = get_time_difference(arranged_shift.finish_time, absence.finish_time);
if (start_time_difference === 0 && finish_time_difference > 0){
add_time(absence.finish_time, arranged_shift.finish_time);
}
else if (start_time_difference < 0 && finish_time_difference > 0){
add_time(arranged_shift.start_time, absence.start_time);
add_time(absence.finish_time, arranged_shift.finish_time)
}
else if (finish_time_difference === 0 && start_time_difference < 0){
add_time(arranged_shift.start_time, absence.start_time);
}
}
}
console.log(available_times);