直接上Example:
IF ip_loaddate_from IS INITIAL AND ip_loaddate_to IS INITIAL. CONCATENATE sy-datum(6) '01' INTO r_loaddate-low. ”获取当前月的第一天 CALL FUNCTION 'BKK_GET_MONTH_LASTDAY' ”获取当前月的最后一天 EXPORTING i_date = sy-datum IMPORTING e_date = r_loaddate-high. r_loaddate-sign = 'I'. r_loaddate-option = 'BT'. APPEND r_loaddate. ENDIF.
获取一个月的最后一天不需要自己写方法,可以直接调用了bkk_get_month_lastday这个function,这个function还处理好闰年闰月的问题,函数内容如下:
function bkk_get_month_lastday."Determine Last Day of Month *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(I_DATE) LIKE SY-DATUM *" EXPORTING *" VALUE(E_DATE) LIKE SY-DATUM *"---------------------------------------------------------------------- data: check_year_1 type p. data: check_year_2 type p. e_date(4) = i_date(4). e_date+4(2) = i_date+4(2). if i_date+4(2) = '01' or i_date+4(2) = '03' or i_date+4(2) = '05' or i_date+4(2) = '07' or i_date+4(2) = '08' or i_date+4(2) = '10' or i_date+4(2) = '12'. e_date+6(2) = '31'. " 31 days per month elseif i_date+4(2) = '04' or i_date+4(2) = '06' or i_date+4(2) = '09' or i_date+4(2) = '11'. e_date+6(2) = '30'. " 30 days per month elseif i_date+4(2) = '02'. " 闰年的问题 e_date+6(2) = '28'. check_year_1 = i_date(4) mod 4. " all 4 years is leap year if check_year_1 = 0. e_date+6(2) = '29'. check_year_1 = i_date(4) mod 100." but not all 100 years check_year_2 = i_date(4) mod 400." excluding all 400 years if check_year_1 = 0 and check_year_2 <> 0. e_date+6(2) = '28'. endif. endif. endif. endfunction.