Add n number of working days to date

The following ABAP code adds/Subtracts n number of months from a particular date. You would think this should be a relativly straight forward process by using the SAP 'CALCULATE_DATE' function module. Unfotunately this does not take into account months having a different number of days i.e. If you start at 31.05.2003 and subtract 1 month the result would be 31.04.2003 which is an invalid date as April only has 30 days. This causes the SAP FM to return the date as 00000000. The code below provides a solution to this issue.

Update: If it exists on your system a much simplier way would be to use function module MONTH_PLUS_DETERMINE as this takes into account months with different amounts of days.

Simply add the below ABAP FORM into you report code and call it using the usual PERFORM command:

DATA: ld_date TYPE sy-datum. ld_date = sy-datum. PERFORM calculate_date using '-4' changing ld_date.


*&-----------------------------------------------------*
*&      Form  CALCULATE_DATE
*&-----------------------------------------------------*
*       Add/Subtract n number of months from a date
*------------------------------------------------------*
*  -->  p_months  Number of months to add/subtract
*  <--  p_date    Start date and result date
*------------------------------------------------------*
FORM calculate_date USING p_months
                    CHANGING p_date.
  DATA: ld_datestor TYPE sy-datum.
  ld_datestor = p_date.
  CALL FUNCTION 'CALCULATE_DATE'
       EXPORTING
            months      = p_months
            start_date  = p_date
       IMPORTING
            result_date = p_date.
* Check resultant date is valid.
  IF p_date IS INITIAL.
*  Resultant day must have been beyond last day of month, Repeat
*  process but change date to first day of month
    p_date = ld_datestor.
    p_date+6(2) = '01'.
    CALL FUNCTION 'CALCULATE_DATE'
         EXPORTING
              months      = p_months
              start_date  = p_date
         IMPORTING
              result_date = p_date.
*   Now Find last day of resultant month (First day of next month - 1)
*   ******************************************************************
*   Add 1 to month
    CALL FUNCTION 'CALCULATE_DATE'
         EXPORTING
              months      = '01'
              start_date  = p_date
         IMPORTING
              result_date = p_date.
*   Subtract 1 from day
    CALL FUNCTION 'CALCULATE_DATE'
         EXPORTING
              days        = '-1'
              start_date  = p_date
         IMPORTING
              result_date = p_date.
  ENDIF.
ENDFORM.                    " CALCULATE_DATE

Related Articles

SAP ABAP Date Processing - Example code and information on how to process SAP date fields
Add n number of working days to date (allow result to be a non working day)
Add n number of working days to date
Formatting SAP date field using ABAP into any format such as DDMMYYY, MM/DD/YYYY, DD-MMM-YY...
Formatting a date field
Check if date periods overlap
Add n number of working days to date
Convert month value of a date to text
Add n number of working days to date using SAP personal work schedule
Add n number of working days to date (using personal work schedule)