根据输入日期输出当月第一天和最后一天
HR_JP_MONTH_BEGIN_END_DATE
DATA: lv_iv_date TYPE d,
lv_ev_month_begin_date TYPE d,
lv_ev_month_end_date TYPE d.
lv_iv_date = '20230519'.
CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE' "根据输入日期输出当月第一天和最后一天
EXPORTING
iv_date = lv_iv_date "输入日期
IMPORTING
ev_month_begin_date = lv_ev_month_begin_date "当月第一天
ev_month_end_date = lv_ev_month_end_date. "当月最后一天
lv_ev_month_begin_date = '20230501'. "当月第一天
lv_ev_month_end_date = '20230531'. "当月最后一天
根据输入日期输出当月最后一天
LAST_DAY_OF_MONTHS
DATA: lv_day_in TYPE sy-datum,
lv_last_day_of_month TYPE sy-datum.
lv_day_in = '20230519'.
CALL FUNCTION 'LAST_DAY_OF_MONTHS' "根据输入日期输出当月最后一天
EXPORTING
day_in = lv_day_in "输入日期
IMPORTING
last_day_of_month = lv_last_day_of_month "输入日期当月最后一天
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
// 结果
lv_last_day_of_month = '20230531'. "输入日期当月最后一天
BKK_GET_MONTH_LASTDAY
DATA: LV_i_date TYPE sy-datum,
lv_e_date TYPE sy-datum.
LV_i_date = '20230520'.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY' "获取输入日期当月最后一天
EXPORTING
i_date = LV_i_date "输入日期
IMPORTING
e_date = lv_e_date. "输入日期当月最后一天
// 结果
lv_e_date = '20230531'. "输入日期最后一天
DATE_GET_MONTH_LASTDAY
DATA: LV_i_date TYPE sy-datum,
lv_e_date TYPE sy-datum.
LV_i_date = '20230520'.
CALL FUNCTION 'DATE_GET_MONTH_LASTDAY' "获取输入日期当月最后一天
EXPORTING
i_date = LV_i_date "输入日期
IMPORTING
e_date = lv_e_date. "输入日期最后一天
// 结果
lv_e_date = '20230531'. "输入日期最后一天
根据输入日期返回星期几
DAY_IN_WEEK
DATA: lv_datum TYPE d,
lv_wotnr TYPE p.
lv_datum = '20230521'.
CALL FUNCTION 'DAY_IN_WEEK' "根据输入日期返回星期几
EXPORTING
datum = lv_datum "输入日期
IMPORTING
wotnr = lv_wotnr. "星期几对应的数值
// 结果
lv_wotnr = 7. "星期几对应的数值
计算开始日期时间和截止日期时间之间的分钟数
DELTA_TIME_DAY_HOUR
DATA: lv_t1 TYPE t,
lv_t2 TYPE t,
lv_d1 TYPE d,
lv_d2 TYPE d,
lv_minutes TYPE i.
lv_t1 = '080000'.
lv_t2 = '090000'.
lv_d1 = '20230520'.
lv_d2 = '20230521'.
CALL FUNCTION 'DELTA_TIME_DAY_HOUR' "计算开始日期时间和截止日期时间之间的分钟数
EXPORTING
t1 = lv_t1 "开始时间
t2 = lv_t2 "截止时间
d1 = lv_d1 "开始日期
d2 = lv_d2 "截止日期
IMPORTING
minutes = lv_minutes. "相差分钟数
lv_minutes = 1500. "相差分钟数
根据输入日期/天/月/年/往前往后输出需要的日期
RP_CALC_DATE_IN_INTERVAL
DATA: lv_date TYPE p0001-begda,
lv_days TYPE t5a4a-dlydy,
lv_months TYPE t5a4a-dlymo,
lv_signum TYPE t5a4a-split,
lv_years TYPE t5a4a-dlyyr,
lv_calc_date TYPE p0001-begda.
lv_date = '20230501'.
lv_days = 10.
lv_months = 1.
lv_signum = '+'.
lv_years = 1.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' "根据输入日期/天/月/年/往前往后输出需要的日期
EXPORTING
date = lv_date "输入日期
days = lv_days "天数
months = lv_months "月份
signum = lv_signum "+ 往后 -往前
years = lv_years "年
IMPORTING
calc_date = lv_calc_date. "输出日期
// 结果
lv_calc_date = '20240611'. "输出日期
计算输入开始日期和截止日期之间的天/月/年/期间表
HR_99S_INTERVAL_BETWEEN_DATES
DATA: lv_begda TYPE d,
lv_endda TYPE d,
lv_tab_mode TYPE c,
lv_days TYPE i,
lv_c_weeks TYPE i,
lv_c_months TYPE i,
lv_c_years TYPE i,
lt_month_tab TYPE p99sg_month_tab.
lv_begda = '20230520'.
lv_endda = '20230601'.
lv_tab_mode = 'I'.
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES' "计算输入开始日期和截止日期之间的天/月/年/期间表
EXPORTING
begda = lv_begda "开始日期
endda = lv_endda "截止日期
tab_mode = lv_tab_mode "下面的MONTH_TAB是否返回参数 空 不返回 I 返回
IMPORTING
days = lv_days "相差天数 包括截止当天 所以一般减一
c_weeks = lv_c_weeks "相差周数
c_months = lv_c_months "相差月份
c_years = lv_c_years "相差年数
month_tab = lt_month_tab. "开始日期和截止日期之间的月/年/每月第一天/最后一天
// 结果
lv_days = 13. "相差天数 包括截止当天 所以一般减一
lv_c_weeks = 1. "相差周数
lv_c_months = 0. "相差月份
lv_c_years = 0. "相差年数
lt_month_tab
MONTH YEAR BEGDA ENDDA
05 2023 2023-05-01 2023-05-31
06 2023 2023-06-01 2023-06-30
校验两个日期时间是否重叠
ISU_TIMESLICE_SEC_COMMON
DATA: ls_x_cm_from1 TYPE isu_datetime,
ls_x_cm_to1 TYPE isu_datetime,
ls_x_cm_from2 TYPE isu_datetime,
ls_x_cm_to2 TYPE isu_datetime,
ls_y_com_from TYPE isu_datetime,
ls_y_com_to TYPE isu_datetime,
lv_y_retcode TYPE sy-subrc.
ls_x_cm_from1-date = '20230518'. "日期
ls_x_cm_from1-time = '000000'. "时间
ls_x_cm_to1-date = '20230520'. "日期
ls_x_cm_to1-time = '000000'. "时间
ls_x_cm_from2-date = '20230520'. "日期
ls_x_cm_from2-time = '000000'. "时间
ls_x_cm_to2-date = '20230521'. "日期
ls_x_cm_to2-time = '000000'. "时间
CALL FUNCTION 'ISU_TIMESLICE_SEC_COMMON' "校验两个日期是否有重叠
EXPORTING
x_cm_from1 = ls_x_cm_from1 "起始日期时间1
x_cm_to1 = ls_x_cm_to1 "截止日期时间1
x_cm_from2 = ls_x_cm_from2 "起始日期时间2
x_cm_to2 = ls_x_cm_to2 "截止日期时间2
IMPORTING
y_com_from = ls_y_com_from "重叠起始日期时间
y_com_to = ls_y_com_to "重叠截止日期时间
y_retcode = lv_y_retcode. "是否有重叠 0是 4否
ls_y_com_from-date = '20230520'. "日期
ls_y_com_from-time = '000000'. "时间
ls_y_com_from-date = '20230520'. "日期
ls_y_com_from-time = '000000'. "时间
lv_y_retcode = 0. "重叠