ABAP 根据当前日期计算出上个月最后一天日期

今天突然间遇见个需求就是屏幕比如输入

我在程序需要计算当前日期的上个月最后一天。。无奈自己撸代码吧。。 

"获取当前日期的上一个月最后一天日期  start...
  DATA: last_month LIKE bsid-budat.     "上月日期
  CALL FUNCTION 'MONTH_PLUS_DETERMINE'
    EXPORTING
      months  = -1   "获取上个月当前日期 所以减1
      olddate = allgstid
    IMPORTING
      newdate = last_month."上个月

    DATA: I_DATE LIKE  SY-DATUM ."  I_DATE 为输入的日期
    DATA: E_DATE LIKE  SY-DATUM ."E_DATE 为输出日期
    DATA: WANT_DATE LIKE  SY-DATUM .
      I_DATE = last_month.
     " PERFORM get_last_m_end.
      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.

    WANT_DATE = E_DATE."到这就是上个月日期最后一天 

我相信你会看懂 除非你是新手~~~~~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值