# Calculate is times between times

I need to create a function that excepts 2 parameters arrays of times and return true or false if the second array between one of the times of the first array:

```function calculateIsBetween(workTimes, breakTimes) {
// ... ... ...
}
```

example 1:

```calculateIsBetween(
[
{entryTime: '12:00', exitTime: '13:00'},
{entryTime: '14:00', exitTime: '15:00'}
],

[
{startBreak: '12:05', endBreak: '12:10'},
{startBreak: '12:25', endBreak: '12:30'}
]
)
```

function returns true because breaks between at least one of the entry time and exit time.

example 2:

```calculateIsBetween(
[
{entryTime: '12:00', exitTime: '13:00'},
{entryTime: '14:00', exitTime: '15:00'}
],

[
{startBreak: '16:05', endBreak: '18:10'},
{startBreak: '12:25', endBreak: '12:30'}
]
)
```

function returns false because breaks not between at least one of the entry time and exit time.

p.s function also needs to take care about overnight times.

I tried something with moment but it doesn’t work well.

May you can help me

I will attempt to break down my code, hopefully it is written well enough to be self explanatory. First I need to create an array of allowed ranges for breaks. Each item in the array will have a max for the hours, and a max for the minutes. I use `.map` to create the array of max – min values from the work times argument passed.

My next line returns the boolean return from a `.every` test method placed on the `breakTimes` array. The test that every item in the array must pass is a function which first grabs the start and end values for hour and minute. This test returns true if even one set from the allowed ranges allows the break times.

I did not understand what you meant by taking the next day into consideration, there was no data for the day in the examples given. This should be a good stepping off point though.

```function calculateIsBetween(workTimes, breakTimes) {
const allowedRanges = workTimes.map(({entryTime, exitTime}) => {
const [hMin, mMin] = entryTime.split(":");
const [hMax, mMax] = exitTime.split(":");
return {hMin, hMax, mMin, mMax};
});
return breakTimes.every(({startBreak, endBreak}) => {
const [hStart, mStart] = startBreak.split(":");
const [hEnd, mEnd] = endBreak.split(":");
return allowedRanges.some(({hMin, hMax, mMin, mMax}) => {
if (
hStart < hMin ||
hEnd > hMax
) return false;
if (
hStart > hMin &&
hEnd < hMax
) return true;
if (
(hStart == hMin && mStart < mMin) ||
(hEnd == hMax && mEnd > mMax)
) return false;
return true;
});
});
}
console.log(
calculateIsBetween(
[
{entryTime: '12:00', exitTime: '13:00'},
{entryTime: '14:00', exitTime: '15:00'}
],
[
{startBreak: '12:05', endBreak: '12:10'},
{startBreak: '12:25', endBreak: '12:30'}
]
)
); //returns true
console.log(
calculateIsBetween(
[
{entryTime: '12:00', exitTime: '13:00'},
{entryTime: '14:00', exitTime: '15:00'}
],
[
{startBreak: '16:05', endBreak: '18:10'},
{startBreak: '12:25', endBreak: '12:30'}
]
)
); //returns false```
`.as-console-wrapper { max-height: 100% !important; top: 0;}`