Skip to Content
0
Former Member
Jan 19, 2006 at 10:49 AM

Standard function to calcul dates ?

46 Views

Hi.

I need a function where you can input 2 dates and it returns the difference between them like that :

Days : ..

Months : ..

For exemple : 18.01.2006 & 19.02.2006 and it returns : 1 day and 12 months.

I already have a solution from my own <b>but</b> i will have to use a <u>standard</u> function instead of mine ... if something like that exists. ^^

Anybody have ever use something like that ?

Thanks for the help !!

FUNCTION zcalcul_ecart_date.
*"----------------------------------------------------------------------
*"*"Interface locale :
*"  IMPORTING
*"     REFERENCE(I_DATE_DEB) LIKE  SY-DATUM
*"     REFERENCE(I_DATE_FIN) LIKE  SY-DATUM
*"  EXPORTING
*"     REFERENCE(ENBJOURS) TYPE  I
*"     REFERENCE(ENBMOIS) TYPE  I
*"----------------------------------------------------------------------

  w_date_deb = i_date_deb.
  w_date_fin = i_date_fin.


  CLEAR w_date_suiv.
  CLEAR w_nb_mois.
  CLEAR w_nb_jrs_rest.

  IF w_date_deb+4(2) <> w_date_fin+4(2).
    w_date_suiv = w_date_deb.
    PERFORM ajout_mois CHANGING w_date_suiv.

    DO.
      IF w_date_suiv <= w_date_fin.
        w_nb_mois = w_nb_mois + 1.
        IF w_date_suiv = w_date_fin.
          EXIT.
        ENDIF.
        PERFORM ajout_mois CHANGING w_date_suiv.

      ELSE.
        EXIT.
      ENDIF.
    ENDDO.

    IF w_date_suiv+4(2) = w_date_fin+4(2).

      IF w_date_suiv+6(2) <> w_date_fin+6(2).

        PERFORM retrait_mois CHANGING w_date_suiv.

        PERFORM calcul_nb_jrs_mois USING w_date_suiv
        CHANGING w_nb_jrs_mois.

        IF w_nb_jrs_mois > w_date_suiv+6(2).
          w_nb_jrs_rest = w_nb_jrs_mois - w_date_suiv+6(2).
        ENDIF.

        w_nb_jrs_rest = w_nb_jrs_rest + w_date_fin+6(2).

      ENDIF.

    ELSE.

      w_nb_jrs_rest = w_date_fin+6(2) - w_date_suiv+6(2).

    ENDIF.

  ELSE.
    w_nb_jrs_rest = w_date_fin+6(2) - w_date_deb+6(2).
    w_nb_mois = 0.
  ENDIF.

  enbjours = w_nb_jrs_rest.
  enbmois = w_nb_mois.


ENDFUNCTION.