Probably a little off topic but this is always a concern....
I have a Time Range between 22:00 and 06:00am the following day
People normally work 18:00 to 06:00 the following day.
I need to calc the number of hours they work between the Range Hours which is obviously normally 8 hours.
But need to consider the alternatives...for example
Start at 22:00 and Finish at 03:00 ..... 5 Hours
Start at 03:00 and Finish at 06:00 ..... 3 Hours
Start at 02:00 and Finish at 05:00 ----- 2 Hours
So....using 4 distinct Rules works...
Rule 1: WS <= RS AND WE >= RE
If
TestBO.WorkTimeStart>=TestBO.HourRangeStart AND
TestBO.WorkTimeStart<TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd<=TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd>TestBO.HourRangeStart
Then
TestBO.HoursInRange=TestBO.WorkTimeEnd-TestBO.WorkTimeStart
Rule 2: WS <= RS AND WE > RS AND WE <= RE
If
TestBO.WorkTimeStart<=TestBO.HourRangeStart AND
TestBO.WorkTimeEnd>TestBO.HourRangeStart AND
TestBO.WorkTimeEnd<=TestBO.HourRangeEnd
Then
TestBO.HoursInRange=TestBO.WorkTimeEnd-TestBO.HourRangeStart
Rule 3: WS >= RS AND WS < RE AND WE >= RE
If
TestBO.WorkTimeStart>=TestBO.HourRangeStart AND
TestBO.WorkTimeStart<TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd>=TestBO.HourRangeEnd
Then
TestBO.HoursInRange=TestBO.HourRangeEnd-TestBO.WorkTimeStart
Rule 4: WS >= RS AND WS < RE AND WE <= RE AND WE > RS
If
TestBO.WorkTimeStart>=TestBO.HourRangeStart AND
TestBO.WorkTimeStart<TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd<=TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd>TestBO.HourRangeStart
Then
TestBO.HoursInRange=TestBO.WorkTimeEnd-TestBO.WorkTimeStart
Now... if I combine all into a single Rule........ the 3rd expression fails.
Rule: Combined
IF
TestBO.WorkTimeStart<=TestBO.HourRangeStart AND
TestBO.WorkTimeEnd>=TestBO.HourRangeEnd
THEN
TestBO.HoursInRange=TestBO.HourRangeEnd-TestBO.HourRangeStart
ELSE
If
TestBO.WorkTimeStart<=TestBO.HourRangeStart AND
TestBO.WorkTimeEnd>TestBO.HourRangeStart AND
TestBO.WorkTimeEnd<=TestBO.HourRangeEnd
THEN
TestBO.HoursInRange=TestBO.WorkTimeEnd-TestBO.HourRangeStart
ELSE
If
TestBO.WorkTimeStart>=TestBO.HourRangeStart AND
TestBO.WorkTimeStart<TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd>=TestBO.HourRangeEnd
THEN
TestBO.HoursInRange=TestBO.HourRangeEnd-TestBO.WorkTimeStart
ELSE
If
TestBO.WorkTimeStart>=TestBO.HourRangeStart AND
TestBO.WorkTimeStart<TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd<=TestBO.HourRangeEnd AND
TestBO.WorkTimeEnd>TestBO.HourRangeStart
THEN
TestBO.HoursInRange=TestBO.WorkTimeEnd-TestBO.WorkTimeStart
So, I am pretty sure I don't have an error in there (But it is a real possibility) but I have seen this behavior on the odd occasion before so tend to use separate rules now to be on the safe side.