AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kompliziertes Problem mit Wochentagberechnung
Thema durchsuchen
Ansicht
Themen-Optionen

Kompliziertes Problem mit Wochentagberechnung

Ein Thema von Glados · begonnen am 28. Aug 2017 · letzter Beitrag vom 29. Aug 2017
 
Glados
(Gast)

n/a Beiträge
 
#3

AW: Kompliziertes Problem mit Wochentagberechnung

  Alt 28. Aug 2017, 21:28
Also diese Antwort hat mir jetzt leider nicht geholfen
Zitat:
GetDayOfWeek .... Delphi-Referenz durchsuchenDayOfWeek oder Delphi-Referenz durchsuchenDayOfTheWeek
Jetzt hab ichs kapiert. Aber oben schrieb ich:
Zitat:
// Wandelt das Format in ISO 8601 (Montag erster Tag) um
Deswegen habe ich ja meine eigene Funktion - damit bei mir die Woche mit Montag beginnt.

Zitat:
Und wenn die While-Schleife zu früh abbricht, dann stimmt deine Bedingung wohl nicht.
Oder wenn die Schleife immer mindestens einmal durchlaufen soll, dann es womöglich mal mit einer Repeat-Schleife versuchen.
Passt nicht in mein Szenario.

Ich habs jetzt gelöst. Schön ist aber anders
Delphi-Quellcode:
// aExcludeDays =
// 0, -1, -1, -1, -1, -1, -1 // 0 = False, -1 = True (True = verbotener Wochentag)

// StartTimestamp =
// 31.08.2017 als Unix-Timestamp

// Beim Aufruf von dieser Funktion mit übergebenem Start-Datum 31.08.2017 (Donnerstag) und obigem Array,
// muss das Resultat der 04.09.2017 (Montag) sein, da er kein "verbotener" Tag ist.

procedure GetNextAvailableWeekDay(const aExcludeDays: TArray<string>; StartTimestamp: Integer): Integer;
var
 iTmp, aDayOfWeek: Integer;
 bDayExcluded: Boolean;
begin
 iTmp := 0;

 // Prüfe, ob das Startdatum (hier 31.08.2017) ein "verbotener" Tag ist.
 aDayOfWeek := TDateUtils.GetDayOfWeek(UnixToDateTime(StartTimestamp));
 bDayExcluded := StrToBool(aExcludeDays[aDayOfWeek]);

 // Wenn der Tag "verboten" wurde (mit -1 oben im Array), dann springe hier rein
 if bDayExcluded then
  begin
   while True do
    begin
     Inc(StartTimestamp, 86400); // Füge dem Startdatum einen Tag hinzu
     aDayOfWeek := TDateUtils.GetDayOfWeek(UnixToDateTime(StartTimestamp)); // Hole den Wochentag (Woche beginnt mit Montag)

     // Prüfe erneut, ob das Datum ein "verbotener" Tag ist
     bDayExcluded := StrToBool(aExcludeDays[aDayOfWeek]);

     // Ist das Datum ein erlaubter/freier Tag, dann können wir hier abbrechen und es als Ergebnis verwenden
     if not bDayExcluded then
      Break;

     Inc(iTmp);
     if iTmp = 8 then
      begin
       StartTimestamp := 0;
       Break;
      end;
    end;
  end;

 Result := StartTimestamp;
end;

Geändert von Glados (28. Aug 2017 um 22:20 Uhr)
  Mit Zitat antworten Zitat
 


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 07:53 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