Hallo,
Ich möchte mir die Gültigkeitsdauer über mehrere Jahre ausrechnen lassen, jeweils mit "Zwischenergebnissen". Ist das Startdatum (b_date) also z.B. der 1.3.2015 möchte ich als Ergebnis Jahr 1: 29.2.2016, Jahr 2: 28.2.2017 ...
Ich habe es in jeweis zwei Schritten gelöst:
rdate1 = DateAdd("yyyy",1,[b_date])
rdate1 = DateAdd("d",-1,[rdate1])
rdate2 = DateAdd("yyyy",2,[b_date])
rdate2 = DateAdd("d",-1,[rdate2])
Die Frage nun: Kann man sich diese zwei Schritte irgendwie sparen und das Datum in einem derart ausrechnen?
Gruß chainy
Hallo,
nichts einfacher als das.
rdate1 = DateAdd("yyyy",1,[b_date]) -1
rdate2 = DateAdd("yyyy",2,[b_date]) -1
Hallo,
wow. Danke.
Viel zu einfach, als dass ich drauf gekommen wär! :D
Funktioniert aber nur mit Tagen, oder?
Ist zwar für mich im Moment nicht relevant. Dennoch: Wenn ich dann noch ein Monat abziehen/dazuzählen wollte? Dann bleiben mir wohl nur die zwei Schritte?
Gruß chainy
ZitatDann bleiben mir wohl nur die zwei Schritte?
Wenn nicht gar mehr - bei diesen merkwürdigen Versätzen in den Gültigkeitsdauern.
Vielleicht analysierst Du erst einmal die realen Anforderungen.
Wenn bspw. der erste feiertagsfreie Dienstag im Februar zu ermitteln wäre, würde man sehr schnell auf eine Kalendertabelle zurückgreifen.
Hi,
bezüglich der Anforderungen: Es geht um Vertragsdauern, die zugegeben etwas kompliziert sind (jedoch nicht auf meinem Mist gewachsen.) Die enden nun mal nach 365 Tagen, womit der eine Tag wegzurechnen ist, um das Ende richtig zu ermitteln. Wegen der Schaltjahre muss aber zumindest mit Monaten gerechnet werden. Feiertage oder so spielen diesbezüglich keine Rolle (hoffe ich, dass denen, für die ich mich da spiele, nicht noch auf die Idee kommen!!!)
Zusätzlich gibt es dann noch Sonderformen, wo die Vertragsdauer um bestimmte Monate verkürzt, bzw. verlängert wird, deswegen die vermutlich eigenartig anmutende Frage, nach dem nachträglich abzuziehenden Monat.
Gruß chainy
Hallo,
ZitatFunktioniert aber nur mit Tagen, oder?
funktioniert mit feststehenden Intervallen, auch mit Wochen was ja auch nicht anderes ist als Tage. An der 7 Tage Woche wird sich ja wohl vorerst nichts ändern. ;D
ZitatDann bleiben mir wohl nur die zwei Schritte?
nein, denn Du kannst ja verschachteln.
rdate1 = DateAdd("m", -1, DateAdd("yyyy", 1, [b_date])) - 1
Addiert ein Jahr und zieht ein Monat und ein Tag ab.
Du kannst aber auch für die Tage DateAdd verwenden:
rdate1 = DateAdd("d", -1, DateAdd("m", -1, DateAdd("yyyy", 1, [b_date])))
Wobei man natürlich gleich mit 11 Monaten rechnen könnte.
Und die Anmerkungen von Ebs sind auch zu beachten.
PS:
Beiträge nicht einfach ergänzen, sondern einen neuen Beitrag schreiben. Wenn Du ergänzt, wird das nicht kenntlich gemacht und es erfolgt auch keine Benachrichtigung. Es besteht also die Gefahr, dass nachträgliche Ergänzungen nicht bemerkt werden und untergehen.
Hallo,
aber die Intervalle müsste man ja vorher irgendwie definieren? Ich meine hier nur das letzte "-1", ohne es in eine Funktion zu packen. Dass die Woche immer sieben Tage hat, war mir schon klar ;D ;D
Danke für die Erklärung mit der Verschachtelung!
Anmerkungen hab ich natürlich zur Kenntnis genommen, nur wie erwähnt, liegt es nicht an mir, das umzusetzen. Bezüglich Anforderungen (wie sinnvoll oder nicht die nun sind) hab ich leider gar kein Mitspracherecht.
Werde in Zukunft das Editieren lassen - danke für den Hinweis.
Gruß chainy
Hallo,
wenn die Intervalle definiert werden müssen, bzw. vom Vertragspartner (Kunde) abhängen, musst Du eine Funktion machen.
Wenn die Verträge immer am 1. eines Monats beginnen und immer komplette Monate umfassen, so ist das -1 ja feststehend und kann immer verwendet werden. Die Laufzeit dann in Monaten in einem Feld. Wenn das nicht der Fall ist, muss aus den Daten eine Regel ableitbar sein, die die Vertragsdauer bestimmt. Z.B. 8 Monate und 5 Tage, oder 200 Tage.
Monate und Tage aber in getrennten Felder. An eine Funktion werden die Werte übergeben und dann datensatzabhängig berechnet.