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 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • Gemeldet - anzeigen

    Man sieht: Viele Wege führen nach Rom.

    • Ninox Premiumpartner
    • Bastian_Vorholt
    • vor 6 Jahren
    • 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 6 Jahren
    • 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 6 Jahren
    • 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 5 Jahren
    • 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 5 Jahren
    • Gemeldet - anzeigen

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

    Birger

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

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

    Über Appointment geht es auch irgendwie.

    • BugTrapper
    • vor 5 Jahren
    • 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 5 JahrenZuletzt aktiv
  • 15Antworten
  • 5728Ansichten