In SAP ABAP, adding months to a date is slightly more complex than adding days because you must consider varying month lengths. Here are different ways to add months to a date:
1. Using SCAL
Class (Recommended for Newer Systems)
DATA: lv_date TYPE d, lv_newdate TYPE d.
lv_date = sy-datum. " Current date
lv_newdate = cl_abap_datfm=>add_to_date( i_date = lv_date, i_months = 2 ). " Add 2 months
WRITE: lv_newdate.
✅ Best practice for modern ABAP
✅ Handles month-end cases properly (e.g., from 31st Jan to 28th/29th Feb)
2. Using RP_CALC_DATE_IN_INTERVAL
Function Module
DATA: lv_date TYPE sy-datum, lv_newdate TYPE sy-datum.
lv_date = sy-datum.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING date = lv_date days = 0 months = 2 " Add 2 months signum = '+' " Add instead of subtract IMPORTING calc_date = lv_newdate.
WRITE: lv_newdate.
✅ Works in older versions of SAP
✅ Supports both months and years adjustments
3. Using DATE_COMPUTE_DAY
Function Module (Alternative)
DATA: lv_date TYPE sy-datum, lv_newdate TYPE sy-datum.
lv_date = sy-datum.
CALL FUNCTION 'DATE_COMPUTE_DAY' EXPORTING date = lv_date months = 2 IMPORTING result = lv_newdate.
WRITE: lv_newdate.
✅ Simple but limited in functionality
⚠️ May not handle complex month-end cases correctly
Which Method to Use?
- ✅ Use
SCAL
(CL_ABAP_DATFM=>ADD_TO_DATE
) for best performance and compatibility. - ✅ Use
RP_CALC_DATE_IN_INTERVAL
if you need compatibility with older systems. - ✅ Use
DATE_COMPUTE_DAY
as a last resort.