How can the elapsed time between a starting time and an ending time be calculated?
Easytrieve Report Generator, release 11.6
Using the following as input:
//TIMECARD DD *
001504 024504
191504 211402
/*
these are the results:
*** START 00:15:04
*** END 02:45:04
*** DURATION 02:30:00
*** START 19:15:04
*** END 21:14:02
*** DURATION 01:58:58
FILE TIMECARD
TC_START 1 6 N
TC_END 9 6 N
*
WK_ST_SECONDS S 9 P 0
WK_ND_SECONDS S 9 P 0
WK_SECONDS S 9 P 0
*
WS_ST_TIME S 6 N MASK ('99:99:99')
WS_ST_HOURS WS_ST_TIME 2 N
WS_ST_MINUTES WS_ST_TIME +2 2 N
WS_ST_SECONDS WS_ST_TIME +4 2 N
*
WS_ND_TIME S 6 N MASK ('99:99:99')
WS_ND_HOURS WS_ND_TIME 2 N
WS_ND_MINUTES WS_ND_TIME +2 2 N
WS_ND_SECONDS WS_ND_TIME +4 2 N
*
WS_PERIOD S 6 N MASK ('99:99:99')
WS_HOURS WS_PERIOD 2 N
WS_MINUTES WS_PERIOD +2 2 N
WS_SECONDS WS_PERIOD +4 2 N
*
JOB INPUT TIMECARD START PROLOG FINISH EPILOG NAME TIMEDIFF
*
IF TC_START NOT NUMERIC
DISPLAY '*** INVALID STARTING TIME *** ' TC_START
GO TO JOB
END-IF
*
IF TC_END NOT NUMERIC
DISPLAY '*** INVALID ENDING TIME *** ' TC_END
GO TO JOB
END-IF
*
IF TC_END < TC_START
DISPLAY '*** ENDING TIME PRIOR TO STARTING TIME *** ' +
TC_END ' < ' TC_START
GO TO JOB
END-IF
WS_ST_TIME = TC_START
WS_ND_TIME = TC_END
*
PERFORM TIMECALC
DISPLAY '*** START ' WS_ST_TIME
DISPLAY '*** END ' WS_ND_TIME
DISPLAY '*** DURATION ' WS_PERIOD
*
PROLOG. PROC
END-PROC
*
EPILOG. PROC
END-PROC
*
TIMECALC. PROC
WK_ST_SECONDS = 3600 * WS_ST_HOURS + 60 * WS_ST_MINUTES + WS_ST_SECONDS
WK_ND_SECONDS = 3600 * WS_ND_HOURS + 60 * WS_ND_MINUTES + WS_ND_SECONDS
WK_SECONDS = WK_ND_SECONDS - WK_ST_SECONDS
WS_HOURS = WK_SECONDS / 3600
WS_MINUTES = (WK_SECONDS - WS_HOURS * 3600) / 60
WS_SECONDS = WK_SECONDS - WS_HOURS * 3600 - WS_MINUTES * 60
END-PROC
/*
//EZTP.TIMECARD DD *
001504 024504
191504 211402
/*
//
The above coding used to calculate the time from the starting time to the ending time works as long as both times are in the same day and the start time is always less than the end time in the same business day. Otherwise, you may take into account that a period of time may go across midnight, there must be an indicator coded that will show whether starting time and ending times are on the same day or a different day. Any modifications needed for the above program are up to the client to make the program modifications.