Datumsberechnung - Monat

Getting started ... Alles für einen gelungenen Start.
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Datumsberechnung - Monat

Beitrag von SaskuAc (Specialist / 321 / 37 / 44 ) »
Hallo,

ich hänge gerade an einem echt dämlichen Problem ...
ich habe 2 Daten ( ist das der plural von Datum? ) - Begda und Endda. Nun muss ich herausfinden, wie viele Tage davon in dem jeweiligen Monat liegen.

Bsp.

Begda: 30.01.
Endda; 05.02.

--> 2 Tage Januar ( 30. & 31. )
--> 5 Tage Februar ( 01. & 02. & 03. & 04. & 05. )

Gibt es einen Funktionsbaustein, eine Funktion, eine Klasse oder sonstiges die das kann? Oder muss ich hier einen Offset jedes einzelnen Datums, dass in der Range liegt, nehmen und dann per Case herausfinden, welcher Monat das ist..?
Noch ein Problem hier wäre dann, dass Wochenende sowie Feiertage nicht beachtet werden sollen.

Danke euch schon mal.

Gruß

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Datumsberechnung - Monat

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Pseudocode

Code: Alles auswählen.

types:begin of lts_data,
        monat  type char2,
        anzahl type i,
      end of lts_data.
data: lt_data type sorted table of lts_data with unique key monat,
      ls_data like line of lt_data.
lv_current_date = begda.    
ls_data-anzahl = 1.  
While lv_current_date <= endda.
  if lv_current_date ist ein Werktag.   " FuBa DATE_CONVERT_TO_FACTORYDATE - exportparameter WORKINGDAY_INDICATOR
    ls_data-monat  = lv_current_date+4(2).
    collect ls_data into table lt_data.
  endif.
  add 1 to lv_current_date.
Endwhile.
Das kann man auch beschleunigen indem man den FuBa nur auf den Monatsersten anwendet. Aber so ist das einfacher zu verstehen und sollte auch nicht so der große Geschwigkeitskiller sein.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Datumsberechnung - Monat

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Was die reinen Anzahlen angeht:

Ich würde es so lösen:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report ZTEST4
*&---------------------------------------------------------------------*
REPORT ZTEST4.

DATA: MONATSLETZTER TYPE D,
      TAGE_IM_ERSTEN_MONAT TYPE I,
      TAGE_IM_ZWEITEN_MONAT TYPE I.

PARAMETERS: BEGDA TYPE D,
            ENDDA TYPE D.

*** START-OF-SELECTION ***
START-OF-SELECTION.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
  EXPORTING DAY_IN = BEGDA
  IMPORTING LAST_DAY_OF_MONTH = MONATSLETZTER.

TAGE_IM_ERSTEN_MONAT = MONATSLETZTER - BEGDA + 1.
TAGE_IM_ZWEITEN_MONAT = ENDDA+6(2).

WRITE: TAGE_IM_ERSTEN_MONAT, TAGE_IM_ZWEITEN_MONAT.
Ggf. muss man natürlich noch die Möglichkeit im Auge haben, dass BEGDA und ENDDA nicht in aufeinanderfolgenden Monaten liegen. Das habe ich in obenstehendem Code nicht berücksichtigt, da es nicht Teil der Frage gewesen ist.

Das mit den Feiertagen bedingt dann natürlich eine Betrachtung der einzelnen Tage, das ist klar.

Re: Datumsberechnung - Monat

Beitrag von mfromg (ForumUser / 17 / 11 / 0 ) »
Es bliebe da natürlich auch noch die Möglichkeit, es einfach so zu machen.
Der AbAp kann das:
:

Code: Alles auswählen.

data: begda type sy-datum.
data: endda type sy-datum.
data: tage type i.

begda = '20170130'.
endda = '20170205'.


tage = endda - begda.

Und wenn es um Feiertage und solche Sachen geht, wäre der Fabrikkalender zu nutzen
für den es eine Reihe von Fuba's gibt.

write: / tage.

Re: Datumsberechnung - Monat

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
mfromg hat geschrieben:Es bliebe da natürlich auch noch die Möglichkeit, es einfach so zu machen.
begda = '20170130'.
endda = '20170205'.
tage = endda - begda.
write: / tage.[/code]
Zwar einfach, aber falsch:
SaskuAc hat geschrieben: Nun muss ich herausfinden, wie viele Tage davon in dem jeweiligen Monat liegen.

Folgende Benutzer bedankten sich beim Autor Unit605 für den Beitrag:
DeathAndPain


Re: Datumsberechnung - Monat

Beitrag von sapyard (ForumUser / 31 / 5 / 2 ) »
If you are still looking for an answer. This might help.

Code: Alles auswählen.

DATA: monatsletzter         TYPE d,
      tage_im_ersten_monat  TYPE i,
      tage_im_zweiten_monat TYPE i,
      lv_continue           TYPE flag VALUE abap_true,
      li_fdat               TYPE STANDARD TABLE OF rke_dat.

PARAMETERS: begda TYPE d,
            endda TYPE d.

*** START-OF-SELECTION ***
START-OF-SELECTION.

  WHILE lv_continue	 = abap_true.

*   Get the last date of current month
    CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
      EXPORTING
        day_in            = begda
      IMPORTING
        last_day_of_month = monatsletzter.

*   If the End date is less than Last date of current month
    IF endda LE monatsletzter.

*     Assign the End date to monatsletzter
      monatsletzter = endda.
*     Need to come out of Loop
      CLEAR lv_continue.
    ENDIF.

*   Get table with all working days in space of time
    CALL FUNCTION 'RKE_SELECT_FACTDAYS_FOR_PERIOD'
      EXPORTING
        i_datab               = begda
        i_datbi               = monatsletzter
        i_factid              = 'US'  " This is for USA. You might need to change
      TABLES
        eth_dats              = li_fdat
      EXCEPTIONS
        date_conversion_error = 1
        OTHERS                = 2.

*   Write Year Month and Number of Working Days
    WRITE:/ begda(6), lines( li_fdat ).

    CLEAR monatsletzter.

*   Get the next month and year.
    CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
      EXPORTING
        date      = begda
        days      = '00'
        months    = '01'
        signum    = '+'
        years     = '00'
      IMPORTING
        calc_date = monatsletzter.

*   Force the first day of next month
    monatsletzter+6(02) = '01'.

*   Assign it to Begin date
    begda = monatsletzter.

    CLEAR monatsletzter.

  ENDWHILE.
Sample Output attached.
Thanking you.

With Regards,
Raju.
----------------------
Raju Shrestha
www.sapyard.com
----------------------

Re: Datumsberechnung - Monat

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Bild

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
sapyard

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Datumsberechnung - Monat

Beitrag von sapyard (ForumUser / 31 / 5 / 2 ) »
@SaskuAc - Did my previous answer help you? Or do you still have issue?
Thanking you.

With Regards,
Raju.
----------------------
Raju Shrestha
www.sapyard.com
----------------------

Seite 1 von 1

Vergleichbare Themen

5
Antw.
1919
Views
Datumsberechnung
von meistercoach » 02.04.2015 11:26 • Verfasst in ABAP® für Anfänger
3
Antw.
1148
Views
Datumsberechnung in Abap
von Mec24 » 10.01.2024 15:00 • Verfasst in ABAP® für Anfänger
1
Antw.
1764
Views
Variable Datumsberechnung - Liste ergänzen?
von Jufo » 08.12.2005 17:59 • Verfasst in ABAP® für Anfänger
2
Antw.
964
Views
Datumsberechnung /-fallunterscheidung im SELECT-Statement
von Ingo » 23.03.2022 13:12 • Verfasst in ABAP® Core
2
Antw.
5711
Views
Dynamische Maßnahme IT0019 Datumsberechnung
von owhc » 29.04.2009 17:38 • Verfasst in Human Resources

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 4 Stunden von black_adept gelöst 23 / 3576
User Exit EXIT_RQCPRM10_001
vor 4 Stunden von a-dead-trousers 2 / 190
Trennen Strasse und Hausnummer
vor 10 Stunden von payten 13 / 10489
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1247

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 4 Stunden von black_adept gelöst 23 / 3576
User Exit EXIT_RQCPRM10_001
vor 4 Stunden von a-dead-trousers 2 / 190
Trennen Strasse und Hausnummer
vor 10 Stunden von payten 13 / 10489
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1247

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2797
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9376