Created On:  06 January 2011

Problem:

Given a date for example yyyymmdd how can we establish the day of the week (for example Sunday, Monday etc.)

Resolution:

The following program may help:

      *****************************************
      *****************************************
       Working-storage section.

       01  INPUT-DATE.
           05  INPUT-YY                PIC 9(4).
           05  INPUT-MM                PIC 9(2).
           05  INPUT-DD                PIC 9(2).
       01  INTEGER-DATE REDEFINES INPUT-DATE.
           05  INT-DATE                PIC 9(8).
      *
       01  WEEK-DAY                    PIC 9.
       01  DISP-DATE.
           05  FILLER                  PIC X(9) VALUE
               "Monday   ".
           05  FILLER                  PIC X(9) VALUE
               "Tuesday  ".
           05  FILLER                  PIC X(9) VALUE
               "Wednesday".
           05  FILLER                  PIC X(9) VALUE
               "Thursday ".
           05  FILLER                  PIC X(9) VALUE
               "Friday   ".
           05  FILLER                  PIC X(9) VALUE
               "Saturday ".
           05  FILLER                  PIC X(9) VALUE
               "Sunday   ".
       01  FILLER REDEFINES DISP-DATE.
           05  DISP-DAY                PIC X(9) OCCURS 7.
      *
       Procedure Division.
       START-UP.
           DISPLAY SPACES.
      *
      *NOTE: FUNCTION CURRENT-DATE returns an Alphanumeric
      *      value and therefore the accepting field must
      *      be alphanumeric.
      *
      *    MOVE FUNCTION CURRENT-DATE TO INPUT-DATE. (For todays date)
      *
      * or    

           ACCEPT INT-DATE AT 1001.

      * This returns the day of week for a given date, where 0 is
      * Sunday, 1 is Monday etc...

           COMPUTE WEEK-DAY =
      *     FUNCTION REM (FUNCTION INTEGER-OF-DATE (INT-DATE), 7) 1.
            FUNCTION REM (FUNCTION INTEGER-OF-DATE (INT-DATE), 7).

      * Because Sunday is 0 this needs to be adjusted for the subscript
      * for the DISP-DATE table.

           IF  WEEK-DAY = 0
               MOVE 7 TO WEEK-DAY.

           DISPLAY DISP-DAY (WEEK-DAY) AT 1201.

           STOP RUN.
Incident #2494958