要求计算一个日期加减月份后的日期,自己写了一个, 后来才发现有系统函数,唉.
*&---------------------------------------------------------------------*
*& Form getdate
*&---------------------------------------------------------------------*
* 以当前日期为准,计算月间隔日期
*----------------------------------------------------------------------*
FORM culc_date USING p_diff_m
CHANGING p_v_date.
DATA:v_year_n(4) TYPE n,
v_year_c(4) TYPE c,
v_month_n(2) TYPE n,
v_month_c(2) TYPE c,
v_day_n(2) TYPE n,
v_day_c(2) TYPE c,
v_date_c(8) TYPE c,
v_mod1 TYPE i,
v_mod2 TYPE i,
v_mod3 TYPE i.
v_month_c = sy-datum+4(2).
v_month_n = v_month_c.
v_year_c = sy-datum+0(4).
v_year_n = v_year_c.
v_day_c = sy-datum+6(2).
v_month_n = v_month_n - p_diff_m.
IF v_month_n <= 0.
v_month_n = v_month_n + 12 + p_diff_m - 1.
v_year_n = v_year_n - 1.
ENDIF.
CASE v_month_n .
WHEN 4 OR 6 OR 9 OR 11.
IF v_day_n = 31.
v_day_n = 30.
ENDIF.
WHEN 2.
v_mod1 = v_year_n MOD 4.
v_mod2 = v_year_n MOD 400.
v_mod3 = v_year_n MOD 100.
IF ( ( v_mod1 = 0 ) OR ( v_mod2 = 0 ) ) AND ( v_mod3 <> 0 ).
IF ( v_day_n > 29 ).
v_day_n = 29.
ENDIF.
ELSE.
IF ( v_day_n > 28 ).
v_day_n = 28.
ENDIF.
ENDIF.
ENDCASE.
v_year_c = v_year_n.
v_month_c = v_month_n.
CONCATENATE v_year_c v_month_c v_day_c INTO v_date_c.
p_v_date = v_date_c.
ENDFORM. " getdate
以下是系统函数示便代码:
p_months = -4."前4月,如果为正,则是后面的日期
CALL FUNCTION 'MONTH_PLUS_DETERMINE'
EXPORTING MONTHS = p_months
OLDDATE = p_date
IMPORTING
NEWDATE = p_date.