[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2015
    Beiträge
    4

    Datumsberechnungen: Monate addieren/subtrahieren

    Hallo Zusammen,

    ich habe eine Frage an die Spezialisten der Datumsberechnungen:

    Ich möchte ab einem eingegebenen Datum monatliche Sätze erstellen, d.h. ab 01.08.2015 jeden Monat bis vorgeg. Ende: 01.09.2015, 01.10.2015 etc.
    Ich rechne den nächsten Monat mit: EVAL $DATD01 += %MONTHS(1)

    Wie löse ich das elegant, wenn ich den 30. oder 31. eingebe? 31.1. + 1 Monat gibt 28 (oder 29.)2., die nächste Addition bringt mir den 28.3.

    Ich kann natürlich schon die althergebrachten Prüfungen einbauen, damit es funkt., aber nachdem die Addition mit Monaten so schön ist und auch die Gültigkeitsprüfung auf das Monatsende quasi beinhaltet, frage ich mich, ob es etwas besseres geben könnte?

    Vielen Dank!

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Moin,
    bleib doch bei deiner Basis und erhöhe die Anzahl Monate die du drauf rechnest.

    RestProblem: Start = 28.2. da mußt du die Basis selber verändern


    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    nextUltimo = ((ultimo + %days(1))
    + %months(1)) - %days(1);
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    @DB
    ja! das ist besser!
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... wenn der Ultimo schon Schlunz war, geht auch:
    ultimo = anyDate + %months(1);
    ultimo = ultimo - %days(%subdt(ultimo : *DAYS));

    das liefert den Ultimo zu einem beliebigen Datum.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Jul 2015
    Beiträge
    4
    Danke für die schnellen Antworten.

    D*B, das funktioniert super beim 31., da ich dann ja immer den Ultiomo möchte.
    Wenn ich aber den 30. habe und eben immer den 30. möchte, funktioniert es schon nicht mehr.

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Stimmt.
    Aber woher sollen wir wissen was du willst?

    dann musst du doch meine Methode nehmen.
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... im Februar gibt es keinen 30. zu möchten, ansonsten kann ich natürlich auch auf den 1. eines Monats 29 Tage drauf addieren - lass doch mal Deine Phantasie spielen gehen...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Dann verwende doch die SQL-Funktion ADD_MONTHS(Datum, AnzMonate).
    Wenn das Ausgangsdatum ein Monatsende ist, wird das Zieldatum auch ein Monatsende sein, unabhängig ob das Monatsende des Ausgangsdatum der 28, 29, 30 oder 31 ist.
    Ist das Ausgangsdatum kein Monatsende, so wird die Anzahl der Monate addiert. Existiert das rechnerische Zieldatum nicht, z.B. auf den 31.01 wird ein Monat addiert, so wird das Monatsende im Ziel-Monat verwendet.

    Code:
      Exec SQL  Set :NewDate = Add_Months(:StartDate, 3);
    Um sicherzustellen, dass das Ausgangsdatum immer ein Monatsende ist, kann man zusätzlich noch die Funktion LAST_DAY verwenden

    Code:
    Exec SQL  Set :NewDate = Add_Months(Last_Day(:StartDate), 3);
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Jul 2015
    Beiträge
    4
    Nett, vielen Dank euch beiden.

  11. #11
    Registriert seit
    Jul 2015
    Beiträge
    4
    Danke Birgitta, das ist genau das, was ich brauche!

Similar Threads

  1. Suche AS400 für 3 Monate
    By Konrad Pietzka in forum NEWSboard Server & Hardware Markt
    Antworten: 1
    Letzter Beitrag: 28-06-01, 15:24

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •