Date Calculator
Problem Description
Calculate: days between two dates, find day of week for any date.
Expected Output
Various date calculations
Hints
Handle month lengths and leap years using intrinsic functions.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. DATECALC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATE1.
05 WS-DD1 PIC 9(2).
05 WS-MM1 PIC 9(2).
05 WS-YY1 PIC 9(4).
01 WS-DATE2.
05 WS-DD2 PIC 9(2).
05 WS-MM2 PIC 9(2).
05 WS-YY2 PIC 9(4).
01 WS-DAYS PIC 9(5).
01 WS-CHOICE PIC 9.
01 WS-DAY-NAME PIC X(10).
01 WS-INTEGER PIC 9(7).
PROCEDURE DIVISION.
DISPLAY "=== DATE CALCULATOR ===".
DISPLAY "1. DAYS BETWEEN DATES".
DISPLAY "2. DAY OF WEEK".
ACCEPT WS-CHOICE.
EVALUATE WS-CHOICE
WHEN 1
DISPLAY "ENTER DATE 1 (DDMMYYYY): "
ACCEPT WS-DATE1
DISPLAY "ENTER DATE 2 (DDMMYYYY): "
ACCEPT WS-DATE2
COMPUTE WS-INTEGER = FUNCTION INTEGER-OF-DATE(WS-YY2 * 10000 + WS-MM2 * 100 + WS-DD2) - FUNCTION INTEGER-OF-DATE(WS-YY1 * 10000 + WS-MM1 * 100 + WS-DD1)
DISPLAY "DAYS BETWEEN: " WS-INTEGER
WHEN 2
DISPLAY "ENTER DATE (DDMMYYYY): "
ACCEPT WS-DATE1
COMPUTE WS-INTEGER = FUNCTION INTEGER-OF-DATE(WS-YY1 * 10000 + WS-MM1 * 100 + WS-DD1)
COMPUTE WS-DAYS = FUNCTION MOD(WS-INTEGER, 7)
EVALUATE WS-DAYS
WHEN 0 MOVE "MONDAY" TO WS-DAY-NAME
WHEN 1 MOVE "TUESDAY" TO WS-DAY-NAME
WHEN 2 MOVE "WEDNESDAY" TO WS-DAY-NAME
WHEN 3 MOVE "THURSDAY" TO WS-DAY-NAME
WHEN 4 MOVE "FRIDAY" TO WS-DAY-NAME
WHEN 5 MOVE "SATURDAY" TO WS-DAY-NAME
WHEN 6 MOVE "SUNDAY" TO WS-DAY-NAME
END-EVALUATE
DISPLAY "DAY: " WS-DAY-NAME
END-EVALUATE.
STOP RUN.
Explanation:
Using intrinsic functions INTEGER-OF-DATE and MOD for date calculations.