[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    298

    SUBDUR oder auch %DIFF

    Hallo zusammen,

    ich errechne die Differenz zweier Datumsfelder in Monaten:

    datum1 subdur datum2 monate:M
    oder auch
    eval monate = %diff(datum1:datum2:*M)

    Beispiel
    datum1 = 31.03.2008
    datum2 = 01.01.2008

    Jetzt ergibts das doch tatsächlich 2 Monate !?!
    Ich hätte jetzt 3 erwartet, der Anwender auch !!!
    Mache ich etwas falsch oder sehe ich das nur falsch ?

    Natürlich, streng gerechnet sind das keine vollen 3 Monate, liegt es daran ?

    Bitte um eure Hilfe !

    Danke
    peet

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.448
    Genau!
    Immerhin fehlt da ja noch ein Tag und das Ergebnis wird abgeschnitten.

    3 - 1 ist ja auch nicht 3 sondern 2.

    Du musst halt 1 Tag dazunehmen, wenn du "inclusiv" rechnen willst:

    %diff(Datum1 + %days(1) : Datum2 : *M)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.895
    Bei der Datums- und Zeitrechnung wird in RPG niemals gerundet, sondern immer abgeschnitten.
    Dabei wird nur die Ergebnis-Einheit und die höheren Einheiten berücksichtigt. In Deinem Fall wird also nur das Jahr und der Monat berücksichtigt.

    Die Differenz von 2008/03 - 2008/01 beträgt 2

    Der folgende Absatz stammt aus der RPG Reference (Built-in-Functionn %DIFF)
    The difference is calculated by subtracting the second operand from the first.
    The result is rounded down, with any remainder discarded. For example, 61 minutes is equal to 1 hour, and 59 minutes is equal to 0 hours.
    Birgitta
    Birgitta Hauser

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

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    2.000
    Uralt, ich weis ...

    Trotzdem... heute im Debug ...

    eval wert = %diff(%date():mo1:*M)
    mit MO1 = 2023-11-30 (Typ D)

    Ergebnis 9!
    Also %diff(2024-09-16:2023-11-30) in Monaten = 9?

    Warum nicht 10

    Das krieg ich nicht auf die Reihe
    Danke
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.448
    Die Rechnung, ist irgendwo beschrieben, macht (days(date1) - days(date2)) / 30.
    Rechne einfach in Excel nach:
    16.09.24 - 30.11.23 = 291 Tage, / 30 = 9,7 Monate, abgeschnitten = 9
    Da ja nicht gerundet wird.....

    Sämtliche Differenz-Routinen mit Datum nehmen leider 30 Tage je Monat und 365 Tage je Jahr.
    In SQL hast du ähnliche funktionen, alledings mit Floor(...) wird immer aufgerundet, bzw. bei negativen Werten abgerundet.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Subdur in Free-Format
    By Peter Kosel in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 03-12-03, 11:10

Berechtigungen

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