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. System.DateUtils.DayOfTheWeek 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 23:33 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