I need to create a function to validate the following situation:
There is another possibility that the allowed starting range is 23:00 to 04:00. In this case, ranges from 5:00 to 6:00 and 21:00 to 22:00 will not be allowed.
Currently my code validates the day normally, but the crossed day does not.
export default function isOutRangeStringTime({
initialTime,
finalTime,
allowedInitialTime,
allowedFinalTime,
}) {
if (allowedInitialTime === allowedFinalTime
|| allowedInitialTime >= allowedFinalTime
|| initialTime >= finalTime) {
return false;
}
return initialTime < allowedInitialTime || finalTime > allowedFinalTime;
}
Here's a picture of the situation that my code doesn't work.
I need validation to work for cross days too.
You can consider adding 24h to allowedFinalTime when allowedFinalTime < allowedInitialTime
Consider using Date Objects. For the sake of simplicity this example work with numbers:
function isOutRangeStringTime(
initialTime,
finalTime,
allowedInitialTime,
allowedFinalTime,
) {
if (allowedInitialTime === allowedFinalTime
|| initialTime === finalTime) {
return false;
}
if( allowedInitialTime > allowedFinalTime ) {
allowedFinalTime += 24
initialTime = (initialTime < allowedInitialTime) ? initialTime + 24 : initialTime;
finalTime = (finalTime < allowedInitialTime) ? finalTime + 24 : finalTime;
}
return initialTime > allowedInitialTime && finalTime < allowedFinalTime;
}