我得到了这样的作业:
我将有一个用户输入日期的选择屏幕输入框和一个输入月份的其他输入框。
我要做的是添加给定的月份数并获得新的日期。
示例:如果输入的日期为2/3/2011
且给定的月份数为5
,我应该7/3/2011
。
我知道系统日期变量'SY-DATUM'有应用服务器日期。
并且做日期操作我可以说SY-DATUM + 2
。我只能添加几天,我应该如何添加几个月。
请给我一个良好的开端。谢谢。
答案 0 :(得分:9)
为日期添加数月的简单方法是使用MONTH_PLUS_DETERMINE
功能模块。
使用类似:
data: mydate type sy-datum.
mydate = sy-datum.
call function 'MONTH_PLUS_DETERMINE'
exporting
MONTHS = 5
OLDDATE = mydate
importing
NEWDATE = mydate.
(如果你想减去MONTHS
可能是负数。)
日期和时间计算还有很多其他辅助函数。当你正在寻找类似的东西时,SDN Wiki上的Useful ABAP Function Modules是一个很好的去处。
答案 1 :(得分:0)
@Mat给出了正确的答案。如果您想在没有功能模块的情况下(无论您的理由是什么)并按照您的问题中的示例进行操作,您可以像这样处理您的问题:
data: lv_month type i;
lv_month = sy-datum+4(2).
sy-datum+4(2) = lv_month + 5.
// Check if months are > 12, if so, subtract 12 and increase sy-datum+0(4). Remember to loop if the input can be greater than 12 months.
正如@Mat所说,不要重新发明轮子。上面的方法并不漂亮,功能模块可以让您更快地到达目的地。
答案 2 :(得分:0)
只需将月份和日期传递到FM以下即可获得新的日期。
DATA : LV_NEWDATE TYPE SY-DATUM.
CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE'
EXPORTING
MONTHS = LV_MONTH " pass months to add
OLDDATE = LV_DATE "pass date here
IMPORTING
NEWDATE = LV_NEWDATE. "get new date