COBOL Date Arithmetic
COBOL Date Arithmetic
Perform date calculations using intrinsic functions and standard techniques.
Integer-of-Date
```cobol COMPUTE WS-INT-DATE = FUNCTION INTEGER-OF-DATE(WS-DATE) ``` Converts YYYYMMDD to integer (days since Dec 31, 1600).
Date-of-Integer
```cobol COMPUTE WS-DATE = FUNCTION DATE-OF-INTEGER(WS-INT-DATE) ```
Adding Days
```cobol COMPUTE WS-INT = FUNCTION INTEGER-OF-DATE(WS-DATE) ADD 30 TO WS-INT COMPUTE WS-NEW-DATE = FUNCTION DATE-OF-INTEGER(WS-INT) ```
Days Between Dates
```cobol COMPUTE WS-DAYS = FUNCTION INTEGER-OF-DATE(END-DATE) - FUNCTION INTEGER-OF-DATE(START-DATE) ```
Day of Week
```cobol ACCEPT WS-DOW FROM DAY-OF-WEEK COMPUTE WS-DOW = FUNCTION MOD( FUNCTION INTEGER-OF-DATE(WS-DATE), 7) + 1 ```
Leap Year Check
```cobol IF FUNCTION MOD(WS-YEAR, 4) = 0 AND (FUNCTION MOD(WS-YEAR, 100) NOT = 0 OR FUNCTION MOD(WS-YEAR, 400) = 0) SET LEAP-YEAR TO TRUE END-IF. ```
Code Example
IDENTIFICATION DIVISION.
PROGRAM-ID. DATE-CALC-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATE1 PIC 9(8) VALUE 20241225.
01 WS-DATE2 PIC 9(8) VALUE 20250115.
01 WS-INT1 PIC 9(7).
01 WS-INT2 PIC 9(7).
01 WS-DAYS PIC S9(5).
01 WS-NEW-DATE PIC 9(8).
PROCEDURE DIVISION.
* Convert to integers
COMPUTE WS-INT1 = FUNCTION INTEGER-OF-DATE(WS-DATE1)
COMPUTE WS-INT2 = FUNCTION INTEGER-OF-DATE(WS-DATE2)
* Days between dates
COMPUTE WS-DAYS = WS-INT2 - WS-INT1
DISPLAY 'Days between: ' WS-DAYS
* Add 30 days
ADD 30 TO WS-INT1
COMPUTE WS-NEW-DATE = FUNCTION DATE-OF-INTEGER(WS-INT1)
DISPLAY 'Date + 30: ' WS-NEW-DATE
STOP RUN.