Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to Real-World Scenarios
Real-World Scenarios | Intermediate | COBOL

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.