![]() |
AW: Datum letzter Samstag?
Um das nochmal zu verdeutlichen: Mein Einzeiler funktioniert nur deswegen, weil DayOfWeek für Sonntag 1 und Samstag 7 zurückgibt und weil nach dem letzten Samstag gefragt wurde. Bei Verwendung von DayOfTheWeek oder der Frage nach einem anderen Wochentag wird es ein klein wenig komplizierter.
Aber andererseits: Genau das war die Frage! |
AW: Datum letzter Samstag?
Man könnte auch einfach das Datum eines Referenzsamstags nehmen, die Differenz zum aktuellen Datum in Tagen bilden, durch 7 teilen, abrunden, und das Ergebnis wieder mit 7 multiplizieren.
Könnte höchstens mit Floating-Point-Ungenauigkeiten Probleme geben. |
AW: Datum letzter Samstag?
Zitat:
Tjo in dem Fall ist es wirklich eine glückliche Fügung, dass der Tag nach dem gewünschten eine 1 zurückliefert bei DayOfWeek :) |
AW: Datum letzter Samstag?
Zitat:
Liefert dieses für Samstag plötzlich 6 zurück, hast du ein Problem. Liefert es einen String, dann erst recht, dann meckert der Compiler. Immer und Überall läuft das also nicht... |
AW: Datum letzter Samstag?
@Zoot
:thumb: Gut gemerkt. So wäre es richtig(er), da es sich auf ein dokumentiertes zugesichertes Verhalten verlässt, wo die zurückgelieferten Werte selber egal sind. ![]() Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten
Delphi-Quellcode:
.
DaySaturday
Delphi-Quellcode:
Ich halte es aber für sehr unwahrscheinlich, dass sich die eine oder andere Funktion ändern wird :)
uses DateUtils;
Function LastSaturday(Date : TDateTime) : TDateTime; Begin Result := Date - 1; While DayOfTheWeek(Result) <> DaySaturday do Result := Result - 1; End; |
AW: Datum letzter Samstag?
Zitat:
Und gleichzeitig wird die Formel dann für alle Wochentage funktionieren. (wenn man nicht die speziell, für den Samstag, gekürzte Version verwendet) |
AW: Datum letzter Samstag?
Noch ein Vorschlag ohne Schleife.
Delphi-Quellcode:
LastDow(Date, DayFriday) sollte dann den 18.7. ergeben.
Function LastDow (const DateToMatch : TDateTime; const DowToMatch : Byte) : TDateTime;
begin result := DateToMatch - ((7 - DowToMatch + DayOfTheWeek(DateToMatch)) mod 7); if result = DateToMatch then result := result - 7; end; |
AW: Datum letzter Samstag?
Zitat:
|
AW: Datum letzter Samstag?
Zitat:
Ich habe erst einmal erlebt, daß die RTL bei einem Delphi-Wechsel ein anderes Ergebnis lieferte: In Delphi 1 war TDate als die Anzahl der Tage seit dem 1.1.0001 definiert, später wurde das auf den 31.12.1899 geändert. |
AW: Datum letzter Samstag?
8-) dass so eine süße kleine Frage so viel Grundlage bietet, dass ich hier 29 Beiträge dazu lesen durfte.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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 by Thomas Breitkreuz