Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeitraum nach Datum eingrenzen (https://www.delphipraxis.net/60053-zeitraum-nach-datum-eingrenzen.html)

Haraldo 2. Jan 2006 13:03


Zeitraum nach Datum eingrenzen
 
Hallo, ich habe ein für mich sehr grosses problem bei dem ich dringend hilfe benötige,
ich habe:
Datum1 = Beginn der Mitgliedschaft
Datum2 = Begin der Abrechnung
Datum3 = ende der Abrechnung
folgende Tabelle muss berücksichtigung finden:

1 - 3 Monat der Mitgliedschaft = 15 € pro monat
4 - 6 Monat der Mitgliedschaft = 10 € pro Monat
7 - 12 Monat der Mitgliedschaft = 7,5 € pro Monat
mehr als 12 Monate Mitgliedschaft = 5 € pro Monat

wenn jemand seine Mitgliedschaft am 16.12.2004 begonnen hat und der Abrechnungsbegin der 1.1.2005 und das Abrechnungsende der 31.12.2005 ist. dann muss ich folgendes ergebniss haben:

Abrechnungssatz 1 = vom 1.1.2005 bis 16.3.2005 = 15 € pro Monat = ca. 42 €
Abrechnungssatz 2 = vom 17.3.2005 bis 16.6.2005 = 10 € pro Monat = ca. 30 €
Abrechnungssatz 3 = vom 17.6.2005 bis 15.12.2005 = 7,5 € pro Monat = ca. 45 €
Abrechnungssatz 4 = vom 16.12.2005 bis 31.12.2005 = 5 € pro Monat = ca. 2,5 €

mir ist soweit alles klar und ich habe es auch schon geproggt, nur ein punkt allerdings der wichtigste fehlt mir. wie kann ich vom datum1 die jeweilige differrenz in monaten dazurechnen.
kann mir jemand aufs Fahrad helfen. Bitte habe es sehr eilig.



:shock:

DelphiAndreas 2. Jan 2006 13:07

Re: Zeitraum nach Datum eingrenzen
 
Ich würde entweder mit FormatDateTime das Datum auf den Monat kürzen, dazuaddieren und wieder zurückrechnen oder mich mal schlau machen, ob es vielleicht eine Funktion gibt, die ähnlich dem VB DateAdd ist.

okay, es heißt IncMonth

Zitat:

IncMonth liefert ein Datum zurück, das um die angegebene Anzahl von Monaten vor oder nach dem Ausgangsdatum liegt.

Unit

SysUtils

Kategorie

Datum und Uhrzeit

function IncMonth(const Date: TDateTime; NumberOfMonths: Integer = 1): TDateTime;

Beschreibung

IncMonth liefert den Wert des Parameters Date zurück, der um die Anzahl der in NumberOfMonths angegebenen Monate erhöht wurde. Wenn NumberOfMonths einen negativen Wert enthält, wird ein Datum zurückgeliefert, das um die angegebene Anzahl von Monaten zurückliegt.

Wenn der angegebene Monatstag größer ist als der letzte Tag des resultierenden Monats, wird der Tag auf den letzten Tag des Monats gesetzt. Die Uhrzeit des im Parameter Date angegebenen Tages wird in das Ergebnis kopiert.
Gruß
Andreas

Thanatos81 2. Jan 2006 14:35

Re: Zeitraum nach Datum eingrenzen
 
Ich denke, er sucht eher:
Delphi-Quellcode:
MonthsBetween
Er will ja sein Datum nicht erhöhen, sondern die Differenz haben, falls ich ihn richtig verstanden habe ;-)

//edit1+2
Wie oft kann man sich eigentlich bei so wenig Text vertippen :roll:

Haraldo 2. Jan 2006 15:24

Re: Zeitraum nach Datum eingrenzen
 
Vielen Dank für die schnelle Antwort. ich habe mich umständlich ausgedrückt. IncMonth hilft schon erheblich ist aber noch nicht mein hauptproblem. ich versuche es nochmal zu umschreiben.

if incMonth(Datum1,3) < Datum2 then
begin
Abrechnungssatz1Begin := Datum2
Abrechnungssatz1Ende := incMonth(Datum1,3);
end;

if (incMonth(Datum1,3) > Datum2) and (IncMonth(Datum1,6) < Datum2) then
begin
Abrechnungssatz2Begin := Abrechnungsdatensatz1Ende
Abrechnungssatz2Ende := incMonth(Datum1,6);
end;

if (incMonth(Datum1,6) > Datum2) then (incMonth(Datum1,12) < Datum2)
begin
Abrechnungssatz3Begin := Abrechnungsdatensatz2Ende
Abrechnungssatz3Ende := incMonth(Datum1,6);
end;

if incMonth(Datum1,12) < Datum2 then
begin
Abrechnungssatz4Begin := Abrechnungsdatensatz3Ende
Abrechnungssatz5Ende := incMonth(Datum1,12);
end;

so gut so schlecht, bei meinem Beispiel benötige ich 4 Abrechnungssätze wie beschrieben,
wenn aber Datum1 = 18.5.2004 ist dann sind es nur zwei Abrechnungssätze

Abrechnungssatz 1 = vom 1.1.2005 bis 18.5.2005 = 10 € pro Monat = 54 €
Abrechnungssatz 2 = vom 19.5.2005 bis 31.12.2005 = 5 € pro Monat = ca. 32 €

wenn aber Datum1 = 18.5.2003 ist dann ist es nur 1 Abrechnungssatz
Abrechnungssatz 1 = vom 1.1.2005 bis 31.12.2005 = 5 € pro Monat = 60 €

vielleicht wird jetzt mein problem deutlicher.
Monthbetween ist zwar eleganter aber löst mein problem auch noch nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz