Application Development and Automation 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: 
Read only

time difference FM

Former Member
0 Likes
998

Hi!

How can I get the time difference between 2 given dates and times?

Ex: Date1: 05-06-2008

Time1: 24:00:00

Date2: 05-02-2008

Time2: 12:23:17

Time difference = ???

I tried looking for some FM, but they mostly give the time difference without considering the date.

Thanks.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
954

Please try this:


CONSTANTS:
      lco_day    TYPE i          VALUE 86400,
      lco_hour   TYPE i          VALUE 3600,
      lco_minute TYPE i          VALUE 60,
      lco_d      TYPE c LENGTH 1 VALUE 'd',
      lco_sep    TYPE c LENGTH 1 VALUE ':'.
    DATA:
      lv_seconds TYPE sytabix,
      lv_day     TYPE i,
      lv_hour    TYPE i,
      lv_minute  TYPE i.

    CALL FUNCTION 'SWI_DURATION_DETERMINE'
      EXPORTING
        start_date = i_start_date
        end_date   = i_end_date
        start_time = i_start_time
        end_time   = i_end_time
      IMPORTING
        duration   = lv_seconds.

    IF lv_seconds >= lco_day.
      lv_day     = lv_seconds DIV lco_day.
      lv_seconds = lv_seconds - lv_day * lco_day.
    ENDIF.
    IF lv_seconds >= lco_hour.
      lv_hour = lv_seconds DIV lco_hour.
      lv_seconds = lv_seconds - lv_hour * lco_hour.
    ENDIF.
    IF lv_seconds >= lco_minute.
      lv_minute = lv_seconds DIV lco_minute.
      lv_seconds = lv_seconds - lv_minute * lco_minute.
    ENDIF.

    r_elapsed-day    = lv_day.
    r_elapsed-sep1   = lco_d.
    r_elapsed-hour   = lv_hour.
    r_elapsed-sep2   = lco_sep.
    r_elapsed-minute = lv_minute.
    r_elapsed-sep3   = lco_sep.
    r_elapsed-second = lv_seconds.

Regards,

9 REPLIES 9
Read only

Former Member
0 Likes
955

Please try this:


CONSTANTS:
      lco_day    TYPE i          VALUE 86400,
      lco_hour   TYPE i          VALUE 3600,
      lco_minute TYPE i          VALUE 60,
      lco_d      TYPE c LENGTH 1 VALUE 'd',
      lco_sep    TYPE c LENGTH 1 VALUE ':'.
    DATA:
      lv_seconds TYPE sytabix,
      lv_day     TYPE i,
      lv_hour    TYPE i,
      lv_minute  TYPE i.

    CALL FUNCTION 'SWI_DURATION_DETERMINE'
      EXPORTING
        start_date = i_start_date
        end_date   = i_end_date
        start_time = i_start_time
        end_time   = i_end_time
      IMPORTING
        duration   = lv_seconds.

    IF lv_seconds >= lco_day.
      lv_day     = lv_seconds DIV lco_day.
      lv_seconds = lv_seconds - lv_day * lco_day.
    ENDIF.
    IF lv_seconds >= lco_hour.
      lv_hour = lv_seconds DIV lco_hour.
      lv_seconds = lv_seconds - lv_hour * lco_hour.
    ENDIF.
    IF lv_seconds >= lco_minute.
      lv_minute = lv_seconds DIV lco_minute.
      lv_seconds = lv_seconds - lv_minute * lco_minute.
    ENDIF.

    r_elapsed-day    = lv_day.
    r_elapsed-sep1   = lco_d.
    r_elapsed-hour   = lv_hour.
    r_elapsed-sep2   = lco_sep.
    r_elapsed-minute = lv_minute.
    r_elapsed-sep3   = lco_sep.
    r_elapsed-second = lv_seconds.

Regards,

Read only

Former Member
0 Likes
954

This one gives the difference in seconds

CCU_TIMESTAMP_DIFFERENCE

Read only

Former Member
0 Likes
954

Hi,

Use the Function module.

SD_DATETIME_DIFFERENCE

Also you can use Function module

SD_CALC_DURATION_FROM_DATETIME

Edited by: Velangini Showry Maria Kumar Bandanadham on May 12, 2008 3:38 PM

Read only

Former Member
0 Likes
954

Hi

Use This Function Module this might find you a solution

SD_CALC_DURATION_FROM_DATETIME

Reward If Helpfull,

Naresh.

Read only

Former Member
0 Likes
954

Hi,

Try those:

SD_DATETIME_DIFFERENCE;

CCU_TIMESTAMP_DIFFERENCE;

FIMA_DAYS_AND_MONTHS_AND_YEARS;

HR_HK_DIFF_BT_2_DATES.

Regards,

Brian Gonsales

Read only

Former Member
0 Likes
954

hi check this..

data: diffdate type d,

difftime type t,

clr type c.

call function /SDF/CMO_DATETIME_DIFFERENCE

IMPORTING

DATE1 = arrivaldate

TIME1 = arrivaltime

DATE2 = clearadate

VALUE = clearatime

EXPORTING

DATEDIFF = diffdate

TIMEDIFF = difftime

EARLIEST = clr

EXCEPTIONS

INVALID_DATETIME.

or use this..DURATION_DETERMINE

regards,

venkat

Read only

Former Member
0 Likes
954

Hi,

try this Function Module : SD_CALC_DURATION_FROM_DATETIME

assign points if helpful

Thanks

Prashanth

Read only

Former Member
0 Likes
954

Hi,

Please use FM SD_DATETIME_DIFFERENCE

Hope this solves your problem.

regards

Ravi

Read only

Former Member
0 Likes
954

Hi Navi,

Please go through this code.

this will give difference in days and hour only.

data: d1 type D VALUE '20080510',

d2 TYPE D VALUE '20080513',

T1 TYPE T VALUE '230000',

T2 TYPE T VALUE '092000',

DATEDIFF TYPE P,

TIMEDIFF TYPE P,

EARLI(10) TYPE C.

CALL FUNCTION 'SD_DATETIME_DIFFERENCE'

EXPORTING

DATE1 = D1

TIME1 = T1

DATE2 = D2

TIME2 = T2

IMPORTING

DATEDIFF = DATEDIFF

TIMEDIFF = TIMEDIFF

EARLIEST = EARLI

EXCEPTIONS

INVALID_DATETIME = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

WRITE:/ DATEDIFF, TIMEDIFF, EARLI.