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
-
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
-
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.
-
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. -
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.
-
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.) -
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 -
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 -
Man sieht: Viele Wege führen nach Rom.
-
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
endSorry war noch ein fehler drinnen. Ja oder so wie Coppytexter ist auch gut.
-
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
-
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.).
-
Hallo,
ich habe die Anzahl der Monate ebenfalls gebraucht und eine globale Funktion gesetzt mit:
f
unction 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
-
Das feld für die Globen Funktionen ist ein wenig eine Diva :-)
Birger
-
Das kann man ja bald im Kopf schneller rechnen :-)
Über Appointment geht es auch irgendwie.
-
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