自定义函数计算日期差,维度到秒

 

FUNCTION ZSNSSF_CALCULATE_DATA.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_DATEF) TYPE  DATUM
*"     REFERENCE(IV_TIMEF) TYPE  UZEIT
*"     REFERENCE(IV_DATET) TYPE  DATUM
*"     REFERENCE(IV_TIMET) TYPE  UZEIT
*"  EXPORTING
*"     REFERENCE(EV_TIME_DIFF) TYPE  STRING
*"     REFERENCE(EV_SECONDS) TYPE  STRING
*"----------------------------------------------------------------------

  DATA: LV_TIMEDIFF TYPE T,
        LV_DATE_B   TYPE D,
        LV_DATE_S   TYPE D,
        LV_TIME_B   TYPE T,
        LV_TIME_S   TYPE T.

  DATA: LV_DIFF_D   TYPE P, "天数差
        LV_DIFF_H   TYPE P, "小时数差
        LV_DIFF_M   TYPE P, "分钟数差
        LV_DIFF_S   TYPE P, "秒数差
        LV_DIFF_ALL TYPE P, "总秒数差
        LV_DIFF_TMP TYPE P. "除去小时的秒数


  IF IV_DATEF = IV_DATET.
    LV_DIFF_D = 0.
    IF IV_TIMET > IV_TIMEF.
      LV_TIME_B  = IV_TIMET.
      LV_TIME_S  = IV_TIMEF.
    ELSE.
      LV_TIME_B  = IV_TIMEF.
      LV_TIME_S  = IV_TIMET.
    ENDIF.

  ELSEIF IV_DATEF > IV_DATET.
    LV_DATE_B	 = IV_DATEF.
    LV_DATE_S  = IV_DATET.
    LV_TIME_B  = IV_TIMEF.
    LV_TIME_S  = IV_TIMET.

  ELSEIF IV_DATEF < IV_DATET.
    LV_DATE_B  = IV_DATET.
    LV_DATE_S  = IV_DATEF.
    LV_TIME_B  = IV_TIMET.
    LV_TIME_S  = IV_TIMEF.

  ENDIF.

  LV_TIMEDIFF = LV_TIME_B - LV_TIME_S.
  IF LV_TIMEDIFF > LV_TIME_B AND IV_DATEF <> IV_DATET.
    LV_DIFF_D = LV_DATE_B - LV_DATE_S - 1.

  ELSEIF LV_TIMEDIFF = LV_TIME_B AND IV_DATEF <> IV_DATET.
    LV_DIFF_D = LV_DATE_B - LV_DATE_S .

  ELSEIF LV_TIMEDIFF < LV_TIME_B AND IV_DATEF <> IV_DATET.
    LV_DIFF_D = LV_DATE_B - LV_DATE_S .

  ENDIF.

  LV_DIFF_ALL = LV_TIME_B+0(2) * 3600 + LV_TIME_B+2(2) * 60 + LV_TIME_B+4(2) -
                  LV_TIME_S+0(2) * 3600 - LV_TIME_S+2(2) * 60 - LV_TIME_S+4(2)  .

  LV_DIFF_H     = FLOOR( ABS( LV_DIFF_ALL ) / 3600 ).

  LV_DIFF_TMP = ABS( ABS( LV_DIFF_ALL ) - ABS( LV_DIFF_H * 3600 ) ).

  LV_DIFF_M     = FLOOR( LV_DIFF_TMP / 60 ) .

  LV_DIFF_S     = ABS( LV_DIFF_TMP - LV_DIFF_M * 60 ).

  LV_DIFF_H = LV_DIFF_H + LV_DIFF_D * 24.

  EV_TIME_DIFF =  LV_DIFF_H  && '时'  &&
                  LV_DIFF_M  && '分' && LV_DIFF_S  && '秒'.
  EV_SECONDS   = LV_DIFF_ALL . "间隔秒数


ENDFUNCTION.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值