![]() |
Probleme bei SerienTerminen von einem Kalender
Hey,
Ich schreibe ja im moment an einem Kalender. Und dieser Kalender bassiert auf den Kalenderwochen. d.h. er zeigt immer eine ganze woche an. (das musste vorweg zur info) so ich möchte nun serien Termine da mit einbinden, also termine die immer wiederkommen. Wenn das Termine sind die (nur ein beispiel) alle 4 wochen wiederkommen habe ich auch schon rausgefunden wie ich das mach. also wenn man rechnet (JetztigeKalenderwoche - StartKalenderwoche ) / dieWiederkehrzeit(also z.b. alle 4 wochen) wenn das Ergebnis von dieser Rechnung keinen Rest hat dann ist die Jetztige Kalenderwoche eine dieser 4 wochen .... okay soweit so gut. jetzt zu meiner Frage. wisst ihr wie ich das einbinden könnte, dass ich z.b. jeden letzten mittwoch im Monat einen termin habe ? weil dann alle 4 wochen zu sagen geht nicht. mal ist der letzte Mittwoch eines Monates nur 3 oder 5 wochen nach dem vorherigen Termin... wisst ihr wie ich das überprüfen könnte ? ich weiß nämlich einfach nicht weiter... ich hoffe ihr versteht mein Problem .... danke schon einmal |
Re: Probleme bei SerienTerminen von einem Kalender
Hallo,
wenn du C# lesen kannst (oder es versuchen willst), dann schau einmal den Tipp unter ![]() Hinweis: % = modulo Gruß Jürgen |
Re: Probleme bei SerienTerminen von einem Kalender
Ein Blick in die Unit DateUtils könnte auch helfen
|
Re: Probleme bei SerienTerminen von einem Kalender
nein ich kann leider kein c#
@mkinzler : was genau meinst du ? ich finde da nämlich nichts.... |
Re: Probleme bei SerienTerminen von einem Kalender
Den letzten Tag eines Monats kann man mit EndOfTheMonth() ermitteln. Den Wochentag eines Datums mit
DayOfTheWeek(). Dann kannst du überprüfen ob der letzte Tag vor dem Mittwoch ist ( dann musst du den Mittoch der Vorwoche nehmen, sonst den Mittwoch dieser Woche) |
Re: Probleme bei SerienTerminen von einem Kalender
Ich habe den verlinkten Source mal übersetzt (hoffentlich richtig).
Delphi-Quellcode:
uses DateUtils;
type TWeekDay = DayMonday..DaySunday; function LastDayOfWeekOfMonth(year,month: Integer;DayOfWeek: TWeekDay): TDate; var temp: TDate; begin temp := IncMonth(EncodeDateTime(year,month,1,0,0,0,0)); Result := IncDay(temp,(DayOfWeek - DayOfTheWeek(temp) + 7) mod 7 - 7); end; |
Re: Probleme bei SerienTerminen von einem Kalender
Hallo DeddyH,
soweit ich es sehe, hast du es im Prinzip richtig übersetzt. Nur mit dem Typ TWeekDay habe ich Zweifel. Unter C# gilt: Zitat:
Delphi-Quellcode:
Jürgen
type TWeekDay = DaySunday..DaySaturday;
|
Re: Probleme bei SerienTerminen von einem Kalender
Ich habe es mal ausprobiert und es scheint zu funktionieren, da ich ja DayOfTheWeek benutze.
|
Re: Probleme bei SerienTerminen von einem Kalender
danke
ich guck mir das morgen in ruhe an und versuch es nachzuvollziehen ^^ danke ^^ |
Re: Probleme bei SerienTerminen von einem Kalender
Zitat:
|
Re: Probleme bei SerienTerminen von einem Kalender
ja will ich xD
falls ihr mich falsch verstanden habt: sorry für die formulierung danke für eure hilfe besser ? ^^ |
Re: Probleme bei SerienTerminen von einem Kalender
@DeddyH
Wie rufst Du Funktion richtig auf? Ich erzeuge hier immer Fehler bei der Parameterübergabe. Gib mal bitte ein Beispiel für diesen Monat mfg Wolfgang |
Re: Probleme bei SerienTerminen von einem Kalender
Delphi-Quellcode:
ShowMessage(DateToStr(LastDayOfWeekOfMonth(2009,7,DayMonday)));
|
Re: Probleme bei SerienTerminen von einem Kalender
Danke, funzt,
hatte DateToStr vergessen! Zitat:
Wolfgang |
Re: Probleme bei SerienTerminen von einem Kalender
hey,
hat einer von euch den algo verstanden ? also weiß wieso man das so machen muss ? kann mir das einer erklären ? ich habe jetzt nämlich eine code der funktioniert aber ich weis nicht wieso... also ich verstehe die logik dahinter nicht ... das wurmt mich könnte mir jemand den algo erklären ? |
Re: Probleme bei SerienTerminen von einem Kalender
|
Re: Probleme bei SerienTerminen von einem Kalender
@Wolfgang
Die Erklärung erschließt sich eher aus der vorherigen Diskussion ![]() 1. Erzeuge ein Datum mit dem Ersten des aktuellen Monats:
Delphi-Quellcode:
2. Mache daraus den Ersten des nächsten Monats:
temp := EncodeDateTime(year,month,1,0,0,0,0);
Delphi-Quellcode:
3. Gehe davon so viele Tage zurück (!), bis der gewünschte Wochentag erreicht wird:
temp := IncMonth(temp);
Delphi-Quellcode:
4. Berechne x möglichst schnell. Machen wir es an einem Beispiel deutlich:
Result := IncDay(temp, x); // mit negativem Integer x
a. Suche den letzten Donnerstag im Juli 2009, also für temp = 01.08.2009. b. Das ist ein Samstag/Sonnabend, also:
Delphi-Quellcode:
c. Gesucht wird DayOfWeek.Donnerstag, also 3 bei DeddyH's Definition
x := DayOfTheWeek(temp); // x = 5 (nur geraten, weil in meiner Doku DayOfTheWeek fehlt)
d. Für modulo sind vorzugsweise positive Zahlen zu verwenden, also Addition von 7, also:
Delphi-Quellcode:
e. Es dürfen nur Zahlen von 0 bis 6 herauskommen, also modulo:
x := 3 - x + 7; // x = 5
Delphi-Quellcode:
f. Wenn ich 5 Tage weitergehe, bekomme ich den nächsten Donnerstag, ich will aber den vorherigen:
x := x mod 7; // x = 5
Delphi-Quellcode:
Das unter 3 eingesetzt gibt das Ergebnis.
x := x - 7; // x = -2
Schönen Sonntag! Jürgen |
Re: Probleme bei SerienTerminen von einem Kalender
@Jürgen
Vielen Dank für die perfekte Erklärung zur Frage von gangs-taas . Ich hatte schon vermutet, daß so ein Zweizeiler nur aus guter Teamarbeit entstanden sein kann. Ich habe jetzt die von Dir angegebene Quelle aufmerksam studiert und nachvollzogen, wie funktionierender Code perfekt optimiert wird. Diskutieren könnte man nur noch über Namensgebung der Funktion. Wie man wieder sieht: Eine Frage an die DP erspart viel Grübelei! Auch schönen Sonntag Wolfgang |
Re: Probleme bei SerienTerminen von einem Kalender
vielen dank
jetzt hab ich es auch vestanden xD |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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