如何取某日的周几,月周,年周(转换例程)

阅读: 评论:0

如何取某日的周几,月周,年周(转换例程)

如何取某日的周几,月周,年周(转换例程)

周几

 DATA: diw_first TYPE d VALUE '19790101'.
  RESULT = ( ( SOURCE_FIELDS-/BIC/ZBUSDE - diw_first ) MOD 7 ) + 1.


月周

=====

FM 

ZGET_WEEK_INFO_BASED_ON_DATE

参考 ECC中的

GET_WEEK_INFO_BASED_ON_DATE

因为BW中没有这个FM

=====

FM:

import: date

export: ZWEEK_MON  type /BIC/OIZWEEK_MON( numc 2)

ZWEEK_YEAR type  /BIC/OIZWEEK_YER   (numc 2)





FUNCTION ZGET_MONTH_WEEK.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(DATE) TYPE  SY-DATUM DEFAULT SY-DATUM
*"  EXPORTING
*"     REFERENCE(ZWEEK_MON) TYPE  /BIC/OIZWEEK_MON
*"     REFERENCE(ZWEEK_YEAR) TYPE  /BIC/OIZWEEK_YER
*"----------------------------------------------------------------------
DATA:
  ZFLAG TYPE /BIC/OIZFLAG,
  p_date1 type sy-datum,
  p_date2 type sy-datum,
  p_date3 type sy-datum,
  P_DATE5 TYPE SY-DATUM,
  P_DATE6 TYPE SY-DATUM,
  P_DATE7 TYPE SY-DATUM,
  P_DATE8 TYPE SY-DATUM,
  L_DATE TYPE SY-DATUM,
  L_DATE1 TYPE SY-DATUM,
  current_week type scal-week,
  current_week1 type scal-week,
  previous_week type scal-week.

  p_date3 = DATE.
  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date =  p_date3
  IMPORTING
  week = current_week
  monday = p_date1
  sunday = p_date2.
ZWEEK_YEAR = current_week+4(2).
* 输入日期的年周,周一与周日。

"判断1日是否跨月
* CONCATENATE p_date3+0(6) '01' INTO L_DATE1.
*  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
*  EXPORTING
*  date = L_DATE1
*  IMPORTING
*  week = CURRENT_WEEK1
*  monday = p_date7
*  sunday = p_date8.
*  IF P_DATE7+4(2) <> P_DATE3+4(2). "1日跨月
*    ZFLAG = 'X'.
*  ELSE.
*    ZFLAG = 'Y'.
*  ENDIF.

  If p_date1+4(2) <> p_date2+4(2)."如果跨月
    IF DATE+4(2) = P_DATE2+4(2). "如果输入日期与星期日同月(某月最前几天)
  ZWEEK_MON = 1.
     ELSEIF P_DATE3+4(2) = P_DATE1+4(2)."如果输入日期与星期一同月(某月最后几天)
       p_date3 = p_date3 - 7.
       CALL FUNCTION 'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date =  p_date3
  IMPORTING
  week = current_week1
  monday = p_date5
  sunday = p_date6."取出上周的周一和周日
 L_date = p_date3.
       WHILE p_date6+4(2) = L_DATE+4(2).

       CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date = p_date3
  IMPORTING
  week = previous_week
  monday = p_date5
  sunday = p_date6.
  P_DATE3 = P_DATE3 - 7.
  ENDWHILE.
IF CURRENT_WEEK+0(4) > PREVIOUS_WEEK+0(4). "如果跨年
    CONCATENATE CURRENT_WEEK+0(4) '01' INTO PREVIOUS_WEEK.
    ZWEEK_MON = CURRENT_WEEK - PREVIOUS_WEEK + 1.
  ELSE.
  ZWEEK_MON = current_week - previous_week.
  ENDIF.
 ENDIF.


  ELSE."如果不跨月
    L_DATE = P_DATE3.
  WHILE p_date2+4(2) = L_DATE+4(2). "只要周日月份等于输入日月份
  p_date3 = p_date3 - 7.
  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date = p_date3
  IMPORTING
  week = previous_week
  monday = p_date1
  sunday = p_date2.
  ENDWHILE.
  IF CURRENT_WEEK+0(4) > PREVIOUS_WEEK+0(4). "如果跨年
    CONCATENATE CURRENT_WEEK+0(4) '01' INTO PREVIOUS_WEEK.
    ZWEEK_MON = CURRENT_WEEK - PREVIOUS_WEEK + 2.
  ELSE.
  ZWEEK_MON = current_week - previous_week."不跨年,不跨月
  ENDIF.
  ENDIF.







ENDFUNCTION.

本文发布于:2024-02-04 07:27:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170702015053544.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:例程   年周
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23