Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

TIME OVERLAPPING.....

Former Member
0 Kudos

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....

1 ACCEPTED SOLUTION

Former Member
0 Kudos

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.

4 REPLIES 4

Former Member
0 Kudos

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.

0 Kudos

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

0 Kudos

Sorry about that. I guess my assumptions were unrealistic.

former_member212653
Active Contributor
0 Kudos

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.