![]() |
Tage zwischen 2 Wochentagen?
Moin,
ich brauche eine Funktion die mir die Tage zwischen 2 Tagen liefert (als Zahl). Dabei geht es nur darum den Wochentag herauszubekommen. Der "Heute"-Tag hat immer den Index 0, das heisst wenn heute Donnerstag wäre, dann wäre Donnerstag 0, Freitag 1 usw... dementsprechend gilt das gleiche wenn ein anderer Tag wäre. Der Tag muss immer über die ersten 3 Buchstaben des Tages übergeben werden. Ich hatte mir das so gedacht:
Delphi-Quellcode:
Leider gibt mir das immer "0" zurück. Nochmal anschaulicher was ich vorhabe:
function GetDayIdx(Day: string): Byte;
function IdxByDay(Day: string; DAYS: array of string): Byte; var I: Integer; begin Result := 0; for I := 0 to 6 do if Lowercase(Day) = Lowercase(DAYS[I]) then Result := I+1; end; const DAYS: array[1..7] of string = ('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'); var Today, DayIdx: Byte; begin Result := 0; Today := IdxByDay(DayOfWeekStr(Now), DAYS); if Today <> 0 then begin DayIdx := IdxByDay(Day, DAYS); if DayIdx <> 0 then Result := IdxByDay(DAYS[DayIdx-Today], DAYS); end; end;
Code:
^^^^^^So würde es aussehen wenn heute Donnerstag wäre.
|mon|tue|wed|thu|fri|sat|sun|
4 5 6 0 1 2 3 Ich möchte die Funktion nun so aufrufen können:
Delphi-Quellcode:
das Ergebnis sollte dann "5" sein....
i := GetDayIdx('tue');
Hat jemand ne Idee wie ich das hinkriegen kann? |
Re: Tage zwischen 2 Wochentagen?
Mein Vorschlag:
Start: Nummer des heutigen Tags (mo=0, so=6); Ende: Nummer des Zieltags
Delphi-Quellcode:
Müsste eigentlich stimmen, ich hab mir einfach das Gitter aufgemalt
ind := ((7-start)+Ende) mod 7;
Code:
Und dann etwas gespielt. Die erste Zeile runter bekomm ich mit 7-Tag, dann geh ich Ende Schritte nach rechts und schau noch, ob ich über die Sieben raus bin.
Mo: 0 1 2 3 4 5 6
Di: 6 0 1 2 3 4 5 usw. |
Re: Tage zwischen 2 Wochentagen?
1. Statt DayOfWeekStr benutze das:
Delphi-Quellcode:
2. Bist du dir sicher, dass der Index immer positiv ist in der Zeile
Today := DayOfWeek(Now - 86400);
Delphi-Quellcode:
[Edit]Hat die letzte Antwort erledigt[/Edit]
Result := IdxByDay(DAYS[DayIdx-Today], DAYS);
Zum Algorithmus: Willst du wissen, wie viele Tage es bis zum nächsten "Day" ist? |
Re: Tage zwischen 2 Wochentagen?
Hi,
das hier betrifft jetzt auch den anderen Thread ! Wer so viele Postings hat, der müßte in der Lage sein folgendes zu bauen :
Delphi-Quellcode:
Jetzt muß ich noch im Programm gucken. 8) LeseFeld betrifft nur DB - Sachen und hat nichts zu sagen. Da steht lediglich ein TDate drin. Die Funktion greift auf ein ARRAY of Strings zu und das ist als CONST deklariert.
Wochentag [DayOfWeek (StrToDate (LeseFeld (AusgabeDS,'TAGNR')))];
Für den Rest wäre wohl DaysBetween zu empfehlen. 8) Siehe OH. :mrgreen: |
Re: Tage zwischen 2 Wochentagen?
Danke @alle, ich guck mir die Beispiele gleich genauer an.
Zitat:
dort steht "tag=0" für "heute", "1" für den nächsten, usw. Das geht halt bis 6 (7 Tage). |
Re: Tage zwischen 2 Wochentagen?
Zitat:
|
Re: Tage zwischen 2 Wochentagen?
Du kannst deine function auch so modifizieren
Delphi-Quellcode:
das funzt dann
function GetDayIdx(Day: string): Byte;
const DAYS: array[1..7] of string = ('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'); function IdxByDay(Day: string): Byte; var I: Integer; begin Result := 0; for I := 1 to 7 do if (Lowercase(Day) = DAYS[I]) then begin Result := I; Label2.Caption := IntToStr(i); end; end; var Today, DayIdx: Byte; begin Result := 0; Today := IdxByDay(DayOfWeekStr(Now)); if Today <> 0 then begin DayIdx := IdxByDay(Day); if DayIdx <> 0 then Result := IdxByDay(DAYS[DayIdx-Today]); end; end; mfg wo |
Re: Tage zwischen 2 Wochentagen?
Die Idee mit dem 86400 von mir weiter oben vergiss mal (kleiner Denkaussetzer, andere Programmiersprache).
Das hier ist die kürzeste Lösung:
Delphi-Quellcode:
Gibt allerdings nicht immer 0 zurück für unbekannte Tage.
function GetDayIdx(const Day: string): Byte;
begin Result := (Pos(Lowercase(Day) + '|', ' |sun|mon|tue|wed|thu|fri|sat|') div 4 + 7 - DayOfWeek(Date)) mod 7; end; |
Re: Tage zwischen 2 Wochentagen?
Liste der Anhänge anzeigen (Anzahl: 1)
Denksport am Abend ist immer gut, vor allem wenn der Source am Ende weg ist. 8) Der ist zwar nicht weg, ich suche ihn aber jetzt nicht mehr. :mrgreen: @Pseudo : probiere die Exe mal aus. Mit den Tagen im voraus geht das so. Die negativen Zahlen zu berücksichtigen, das ist mir aber jetzt zu viel. Insgesamt waren es höchstens 10 Zeilen relevanter Quelltext. Bei Bedarf suche ich den. DaysBetween usw. wird nicht gebraucht.
|
Re: Tage zwischen 2 Wochentagen?
Letztendlich läuft es doch nur auf eine Rotation hinaus oder? Stellen wir uns zwei Scheiben mit den Wochentagen drauf vor, eine inner und eine äußere. Alles was jetzt passiert ist eine Verdrehung der beiden Scheiben gegeneinander. Denk mal etwas in diese Richtung. Und wenn ich mich nicht irre, entspricht dies doch der Cäsar oder Rot-YXZ Verschlüsselung. Das heißt, wenn du diese Verschlüsselung mit 26 Buchstaben hast, dann sollte es kein Problem sein es auf sechst Kürzel für Tage zu übertragen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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