0

Differenz zwischen zwei Daten darstellen

Ich stehe völlig auf dem Schlauch und wahrscheinlich ist es ganz simpel. - Neuling eben...

Ich baue eine Tabelle mit einem Start- und einem Enddatum (Laufzeit). Die Differenz der beiden Daten möchte ich gerne als Anzahl in Monaten darstellen, um damit weiterrechnen zu können.

Endergebnis soll nachher Gesamtkosten pro Monat und einmal Gesamtkosten p. a. Werden.

15 Antworten

null
    • Darko_Kovacevic
    • vor 7 JahrenThu, July 5, 2018 at 10:16 AM UTC
    • Gemeldet - anzeigen

    Hallo Karoline,

    Erstelle zwei neue Datumfelder (Startdatum und Enddatum) und eim Berechnungsfeldmit der Funktion:

    month(Enddatum) - month(Startdatum)

    Im Berechnungsfeld wird nun die Dauer (Anzahl der Monate ) angezeigt. Ich hoffe das konnte helfen. Freundliche Grüsse Darko Kovacevic 

    • Karolin_Pola
    • vor 7 JahrenThu, July 5, 2018 at 11:23 AM UTC
    • Gemeldet - anzeigen

    Dann berechnet er nur die Differenz zwischen den beiden Monaten. Ich habe z. B. eine Laufzeit vom 01.07.2018 - 02.07.2019. Bei der Formel kommt also "0" raus.

    • Tacho
    • vor 7 JahrenThu, July 5, 2018 at 11:52 AM UTC
    • Gemeldet - anzeigen

    Aber genau das sollte doch nach Ihrer Aussage gemacht werden:

    "Die Differenz der beiden Daten möchte ich gerne als Anzahl in Monaten darstellen, um damit weiterrechnen zu können."

    Vielleicht präzisieren Sie die Aufgabenstellung ein wenig, die die Datenbank abdecken soll.

    • Karolin_Pola
    • vor 7 JahrenThu, July 5, 2018 at 12:35 PM UTC
    • Gemeldet - anzeigen

    Ich habe die beiden Datumsfelder:

    Laufzeitanfang 03.07.2018  und Laufzeitende 02.07.2019

    Zu berechnen wäre:

    Laufzeitdauer in Monaten: (hier müsste 12 das Ergebnis sein)

     

    Wenn also ein Vertrag für 24 Monate geschlossen wurde oder für 36, möchte ich gerne, dass Ninox anhand der Laufzeit die Monate der Vertragsdauer berechnet.

    • Tacho
    • vor 7 JahrenThu, July 5, 2018 at 2:01 PM UTC
    • Gemeldet - anzeigen

    Vorausgesetzt, dass der Laufzeitanfang immer auf den ersten Tag des Monats und das Laufzeitende immer auf den letzten Tag eines Monats fallen, könnte man wahrscheinlich folgende Formel verwenden:

    round(days(Laufzeitanfang, Laufzeitende) / 30.4)

    Hier im Forum gibt es aber durchaus schlaue Leute, die bestimmt eine bessere Lösung parat haben (Leo, Der Copytexter etc.)

    • Ninox Premiumpartner
    • Bastian_Vorholt
    • vor 7 JahrenThu, July 5, 2018 at 2:43 PM UTC
    • Gemeldet - anzeigen

    Also ich hab es mal so in einem Berrechnungsfeld hinbekommen. Ist sehr ausführlich kann man auch einfacher schreiben aber ich will ja schon das du es vielleicht verstehst.

    let myStart := month('Start Monat');
    let myEnde := month('Ende Monat');
    let myStartJahr := year('Start Monat');
    let myEndJahr := year('Ende Monat');
    let myMonate := myEnde - myStart;
    let myJahrSum := myEndJahr - myStartJahr;
    if myMonate = 0 then myJahrSum * 12 else myMonate end

    • Ninox-Professional
    • planoxpro
    • vor 7 JahrenThu, July 5, 2018 at 2:52 PM UTC
    • Gemeldet - anzeigen

    Autsch. Danke für die Blumen, aber da dürfte Leo wohl zu Recht beleidigt sein. Ich zerlege solche Aufgaben immer gerne in leicht verdauliche Einzelteile, deshalb wäre meine Variante nur länger, aber nicht genauer, im Endeffekt also schlechter:

    let JahrDiff := year(Enddatum) - year(Startdatum);
    if Jahrdiff > 0 then
    month(Enddatum) - month(Startdatum) + 12 * JahrDiff
    else
    month(Enddatum) - month(Startdatum)
    end

    • Ninox-Professional
    • planoxpro
    • vor 7 JahrenThu, July 5, 2018 at 2:53 PM UTC
    • Gemeldet - anzeigen

    Man sieht: Viele Wege führen nach Rom.

    • Ninox Premiumpartner
    • Bastian_Vorholt
    • vor 7 JahrenThu, July 5, 2018 at 2:59 PM UTC
    • Gemeldet - anzeigen

    let myStart := month('Start Monat');
    let myEnde := month('Ende Monat');
    let myStartJahr := year('Start Monat');
    let myEndJahr := year('Ende Monat');
    let myMonate := myEnde - myStart;
    let myJahrSum := myEndJahr - myStartJahr;
    if myMonate = 0 then
    myJahrSum * 12
    else
    myJahrSum * 12 + myMonate
    end

    Sorry war noch ein fehler drinnen. Ja oder so wie Coppytexter ist auch gut.

    • Leonid_Semik
    • vor 7 JahrenThu, July 5, 2018 at 8:25 PM UTC
    • Gemeldet - anzeigen

    Hallo Zusammen,

    die beiden Formeln werden bei z.B. 01.07.2018-30.06.2019  eine Laufzeit von 11 Monaten berechnen.

    Hallo Karolin,

    wenn ich richtig verstehe: Es geht um die Zeitverträge und beim Vertragsstart kennst du das Startdatum und die Vertragsdauer in Monaten. Und das Enddatum ist immer Startdatum +Anzahl der Monate - 1Tag. Und das berechnest du im Kopf, weil sehr einfach ist. Dann trägst du das im Kopf berenetes Datum ein und möchtest jetzt die Laufzeit nochmal berechnen lassen. Wenn es stimmt, wäre ist villeicht einfacher in der Datenbank das Enddatum zu berechnen. Also Startdatum als Datumsfeld. Anzahl der Monate als Zahlenfeld und Enddatum als Berechungsfeld:

    date(year(Startdatum), month(Startdatum)+Laufzeitdauer, day(Startdatum)-1

     

    Grüße

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 7 JahrenSat, July 7, 2018 at 5:40 AM UTC
    • Gemeldet - anzeigen

    Ja, wenn man die Wahl hat, dann ist die Vorgehensweise ‚Startdatum plus Laufzeit in Monaten‘ sicher die bessere. Ansonsten wird‘s halt ein bisschen komplizierter, und die genaue Umsetzung hängt nicht zuletzt auch von den Erfordernissen des jeweiligen Unternehmens ab („krumme“ Daten? Nur volle Monate? etc.).

    • Maurice
    • vor 6 JahrenThu, May 30, 2019 at 1:05 AM UTC
    • Gemeldet - anzeigen

    Hallo,

    ich habe die Anzahl der Monate ebenfalls gebraucht und eine globale Funktion gesetzt mit:

    function AnzahlMonate(Datum1 : date,Datum2 : date) do
    let JahrDiff := year(Datum2) - year(Datum1);
    let Monate := month(Datum2) - month(Datum1) + 12 * JahrDiff;
    Monate
    end;

    Hat dann die gleiche Funktion für Monate wie days(start,end) für Tage.

    Merkwürdigerweise funktioniert das in der globalen Defintion nicht, definiere ich die Funktion lokal, klappt das.

    Woran könnte das liegen?

    Grüße

    Maurice

    • Birger_H
    • vor 6 JahrenFri, May 31, 2019 at 3:46 PM UTC
    • Gemeldet - anzeigen

    Das feld für die Globen Funktionen ist ein wenig eine Diva :-)

    Birger

    • BugTrapper
    • vor 6 JahrenSat, June 1, 2019 at 12:19 PM UTC
    • Gemeldet - anzeigen

    Das kann man ja bald im Kopf schneller rechnen :-)

    Über Appointment geht es auch irgendwie.

    • BugTrapper
    • vor 6 JahrenSat, June 1, 2019 at 12:28 PM UTC
    • Gemeldet - anzeigen

    globale Funktionen sind deshalb eine Diva, weil man eine Funktion derart abstrahieren muss, so dass sie nicht auf irgendwelche Tabellen zugreift, was zu 99% der Fall ist

Content aside

  • vor 6 JahrenSat, June 1, 2019 at 12:28 PM UTCZuletzt aktiv
  • 15Antworten
  • 5771Ansichten