09-29-2008 3:04 PM
Hi,
I am having DATE1-TIME1 & DATE2-TIME2 and DATE3-TIME3 & DATE4-TIME4.
How to calculate whether DATE1-TIME1 & DATE2-TIME2 and DATE3-TIME3 & DATE4-TIME4 overlap.
Please help.
Thanks in advance....
09-29-2008 3:11 PM
Well you can check ( Assuming DATE2-TIME2 is upper limit of first range, and DATE3-TIME3 is lower limit of second range)
IF DATE2-TIME2 > DATE3-TIME3.
" Overlap
ELSE.
" NO ovelap.
ENDIF.
09-29-2008 3:11 PM
Well you can check ( Assuming DATE2-TIME2 is upper limit of first range, and DATE3-TIME3 is lower limit of second range)
IF DATE2-TIME2 > DATE3-TIME3.
" Overlap
ELSE.
" NO ovelap.
ENDIF.
09-30-2008 3:14 AM
Hello Sandeep
The previous proposal by Aparna is obviously wrong:
--------------------> date/time scale
3-----------4
1-----------2
Date 2 > Date 3 yet the intervals do not overlap.
Sample report ZUS_SDN_DATE_RANGE_CHECK shows how to solve such problem:
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_DATE_RANGE_CHECK
*&
*&---------------------------------------------------------------------*
*& Thread: TIME OVERLAPPING.....
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1067045"></a>
*&---------------------------------------------------------------------*
REPORT zus_sdn_date_range_check.
"TZNTSTMPS: UTC Time Stamp in Short Form (YYYYMMDDhhmmss)
DATA: gd_tstamp1 TYPE tzntstmps,
gd_tstamp2 TYPE tzntstmps,
gd_tstamp3 TYPE tzntstmps,
gd_tstamp4 TYPE tzntstmps.
PARAMETER:
p_day1 TYPE d DEFAULT '20080101',
p_tim1 TYPE t DEFAULT '100000'.
PARAMETER:
p_day2 TYPE d DEFAULT '20080110',
p_tim2 TYPE t DEFAULT '110000'.
PARAMETER:
p_day3 TYPE d DEFAULT '20080105',
p_tim3 TYPE t DEFAULT '120000'.
PARAMETER:
p_day4 TYPE d DEFAULT '20080111',
p_tim4 TYPE t DEFAULT '130000'.
START-OF-SELECTION.
CALL FUNCTION 'CONVERT_INTO_TIMESTAMP'
EXPORTING
i_datlo = p_day1
i_timlo = p_tim1
* I_TZONE = SY-ZONLO
IMPORTING
e_timestamp = gd_tstamp1.
CALL FUNCTION 'CONVERT_INTO_TIMESTAMP'
EXPORTING
i_datlo = p_day2
i_timlo = p_tim2
* I_TZONE = SY-ZONLO
IMPORTING
e_timestamp = gd_tstamp2.
CALL FUNCTION 'CONVERT_INTO_TIMESTAMP'
EXPORTING
i_datlo = p_day3
i_timlo = p_tim3
* I_TZONE = SY-ZONLO
IMPORTING
e_timestamp = gd_tstamp3.
CALL FUNCTION 'CONVERT_INTO_TIMESTAMP'
EXPORTING
i_datlo = p_day4
i_timlo = p_tim4
* I_TZONE = SY-ZONLO
IMPORTING
e_timestamp = gd_tstamp4.
IF ( gd_tstamp3 BETWEEN gd_tstamp1 AND gd_tstamp2 ) OR
( gd_tstamp4 BETWEEN gd_tstamp1 AND gd_tstamp2 ).
MESSAGE 'Date ranges do overlap' TYPE 'S'.
ELSE.
MESSAGE 'No overlag of date ranges' TYPE 'S'.
ENDIF.
END-OF-SELECTION.
Regards
Uwe
09-30-2008 5:42 AM
09-29-2008 3:54 PM
Check out this code:
PARAMETERS: v_date1 TYPE datum OBLIGATORY,
v_time1 TYPE tims OBLIGATORY,
v_date2 TYPE datum OBLIGATORY,
v_time2 TYPE tims OBLIGATORY.
DATA: overlap_time TYPE tims,
overlap_days TYPE i.
IF v_date1 = v_date2.
IF v_time1 > v_time2.
overlap_time = v_time1 - v_time2.
WRITE: /1 'No days overlap'.
WRITE:/1 'Overlap Time:',overlap_time.
ENDIF.
ELSEIF v_date1 > v_date2.
overlap_days = v_date1 - v_date2.
WRITE:/1 'Overlap Days:',overlap_days.
IF v_time2 < v_time1.
WRITE:/1 'Overlap Time:',v_time2.
ELSEIF v_time2 > v_time1.
WRITE:/1 'Overlap Time:',v_time1.
ENDIF.
ELSEIF v_date1 < v_date2.
WRITE: /1 'No days overlap'.
WRITE: /1 'No Time overlap'.
ENDIF.