AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tage zwischen 2 Wochentagen?

Ein Thema von Pseudemys Nelsoni · begonnen am 20. Jun 2005 · letzter Beitrag vom 21. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 21:48
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:
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;
Leider gibt mir das immer "0" zurück. Nochmal anschaulicher was ich vorhabe:

Code:
|mon|tue|wed|thu|fri|sat|sun|
  4   5   6   0   1   2   3
^^^^^^So würde es aussehen wenn heute Donnerstag wäre.

Ich möchte die Funktion nun so aufrufen können:

i := GetDayIdx('tue'); das Ergebnis sollte dann "5" sein....


Hat jemand ne Idee wie ich das hinkriegen kann?
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:07
Mein Vorschlag:

Start: Nummer des heutigen Tags (mo=0, so=6);
Ende: Nummer des Zieltags

 ind := ((7-start)+Ende) mod 7; Müsste eigentlich stimmen, ich hab mir einfach das Gitter aufgemalt
Code:
Mo: 0 1 2 3 4 5 6
Di: 6 0 1 2 3 4 5
usw.
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:09
1. Statt DayOfWeekStr benutze das:
Today := DayOfWeek(Now - 86400); 2. Bist du dir sicher, dass der Index immer positiv ist in der Zeile
Result := IdxByDay(DAYS[DayIdx-Today], DAYS); [Edit]Hat die letzte Antwort erledigt[/Edit]

Zum Algorithmus: Willst du wissen, wie viele Tage es bis zum nächsten "Day" ist?
Volker
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:11
Hi,

das hier betrifft jetzt auch den anderen Thread ! Wer so viele Postings hat, der müßte in der Lage sein folgendes zu bauen :

Wochentag [DayOfWeek (StrToDate (LeseFeld (AusgabeDS,'TAGNR')))]; 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.

Für den Rest wäre wohl DaysBetween zu empfehlen. 8) Siehe OH.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:25
Danke @alle, ich guck mir die Beispiele gleich genauer an.

Zitat:
Zum Algorithmus: Willst du wissen, wie viele Tage es bis zum nächsten "Day" ist?
Jo, es geht darum, das ich eine DLL für mIRC schreibe, dort gibt es einen Link der folgendermassen aussieht:

dort steht "tag=0" für "heute", "1" für den nächsten, usw. Das geht halt bis 6 (7 Tage).
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:31
Zitat:
Für den Rest wäre wohl DaysBetween zu empfehlen.
Da werden aber zwei Dates übergeben und nicht die Namen von zwei Wochentagen!
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:33
Du kannst deine function auch so modifizieren
Delphi-Quellcode:
  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;
das funzt dann

mfg
wo
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Tage zwischen 2 Wochentagen?

  Alt 20. Jun 2005, 22:53
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:
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;
Gibt allerdings nicht immer 0 zurück für unbekannte Tage.
Volker
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Tage zwischen 2 Wochentagen?

  Alt 21. Jun 2005, 01:39
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. @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.
Angehängte Dateien
Dateityp: exe pseudo_573.exe (386,0 KB, 2x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Tage zwischen 2 Wochentagen?

  Alt 21. Jun 2005, 01:53
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz