Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datum letzter Samstag? (https://www.delphipraxis.net/181188-datum-letzter-samstag.html)

AlexII 23. Jul 2014 13:09

Delphi-Version: 7

Datum letzter Samstag?
 
Hallo,

wie finde ich das Datum vom letzten Samstag? Gibt's da vllt eine Funktion oder muss ich da selber rechnen?

Thx

Aphton 23. Jul 2014 13:20

AW: Datum letzter Samstag?
 
Delphi-Quellcode:
function LastSaturday(const AVAlue: TDateTime): TDateTime;
asm
  add esp,-$14
  push dword ptr [ebp+$0c]
  push dword ptr [ebp+$08]
  call DayOfTheWeek
  movzx eax,ax
  inc eax
  neg eax
  mov [ebp-$14],eax
  fild dword ptr [ebp-$14]
  fadd qword ptr [ebp+$08]
  fstp qword ptr [ebp-$10]
  wait
  mov eax,[ebp-$10]
  mov [ebp-$08],eax
  mov eax,[ebp-$0c]
  mov [ebp-$04],eax
  fld qword ptr [ebp-$08]
  mov esp,ebp
  pop ebp
  ret $0008
end;

Uwe Raabe 23. Jul 2014 13:43

AW: Datum letzter Samstag?
 
Delphi-Quellcode:
result := Date - DayOfWeek(Date);

Uwe Raabe 23. Jul 2014 13:43

AW: Datum letzter Samstag?
 
Zitat:

Zitat von aphton (Beitrag 1266421)
Delphi-Quellcode:
function lastsaturday(const avalue: Tdatetime): Tdatetime;
asm
  add esp,-$14
  push dword ptr [ebp+$0c]
  push dword ptr [ebp+$08]
  call dayoftheweek
  movzx eax,ax
  inc eax
  neg eax
  mov [ebp-$14],eax
  fild dword ptr [ebp-$14]
  fadd qword ptr [ebp+$08]
  fstp qword ptr [ebp-$10]
  wait
  mov eax,[ebp-$10]
  mov [ebp-$08],eax
  mov eax,[ebp-$0c]
  mov [ebp-$04],eax
  fld qword ptr [ebp-$08]
  mov esp,ebp
  pop ebp
  ret $0008
end;


wtf?

Der schöne Günther 23. Jul 2014 13:49

AW: Datum letzter Samstag?
 
Das nenne ich mal Hardcore :thumb: 8-)


Mein Stil wäre das hier gewesen:

Delphi-Quellcode:
var
   wantedMonth: TDateTime;
   dayIterator: TDateTime;
begin
   wantedMonth := Now(); // Der aktuelle Monat
   dayIterator := wantedMonth.EndOfMonth(); // Letzter Tag von wantedMonth

   while dayIterator.DayOfWeek <> DaySaturday do
      dayIterator := dayIterator.AddDays(-1);

   WriteLn(
      'Der letzte Samstag des Monats von '
      +currentMonth.ToString().QuotedString()
      +' ist '
      +dayIterator.ToString().QuotedString()
   );


  ReadLn;
end.
Mit dem TDateTimeHelper von
https://github.com/colinj/TDateTimeH...TimeHelper.pas

AlexII 23. Jul 2014 13:49

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1266424)
Delphi-Quellcode:
result := Date - DayOfWeek(Date);

Danke!

himitsu 23. Jul 2014 14:33

AW: Datum letzter Samstag?
 
Delphi-Quellcode:
while dayIterator.DayOfWeek <> DaySaturday do
      dayIterator := dayIterator.AddDays(-1);
Das kann man auch mathematisch lösen.

Delphi-Referenz durchsuchenDayOfWeek oder Delphi-Referenz durchsuchenDayOfTheWeek geben den aktuellen Wochentag zurück.
Und nun braucht man nur noch die nötige Differenz zum gewünschten Samstag berechnen, also anhand dessen Wert für DayOfWeek/DayOfTheWeek.

Ergibt dann (glaub ich)
Delphi-Quellcode:
Result := Date - (DayOfWeek(Date) + 0{DayOfWeek für Samstag} + DaysOfWeek) mod DaysOfWeek;
, bzw. gekürzt das bereits erwähnte
Delphi-Quellcode:
Result := Date - DayOfWeek(Date);
.

Aphton 23. Jul 2014 14:40

AW: Datum letzter Samstag?
 
Ich find meine Lösung am besten.. Ist ein "Einzeiler" (keine Schleife notwendig) :P

Alex_ITA01 23. Jul 2014 14:41

AW: Datum letzter Samstag?
 
Delphi-Quellcode:
function LastSaturday(const AVAlue: TDateTime): TDateTime;
asm
  add esp,-$14
  push dword ptr [ebp+$0c]
  push dword ptr [ebp+$08]
  call [B]DayOfWeek[/B] //DayOfTheWeek gibts nicht
  movzx eax,ax
  inc eax
  neg eax
  mov [ebp-$14],eax
  fild dword ptr [ebp-$14]
  fadd qword ptr [ebp+$08]
  fstp qword ptr [ebp-$10]
  wait
  mov eax,[ebp-$10]
  mov [ebp-$08],eax
  mov eax,[ebp-$0c]
  mov [ebp-$04],eax
  fld qword ptr [ebp-$08]
  mov esp,ebp
  pop ebp
  ret $0008
end;

procedure TForm7.FormCreate(Sender: TObject);
begin
  ShowMessage(DateToStr(LastSaturday(Date)));
end;
liefert den 18.07.2014...

Delphi-Quellcode:
ShowMessage(DateToStr(Date-DayOfWeek(Date)));
liefert den 19.07.2014...

Jetzt kann sich jeder überlegen was stimmt ;-)

Stevie 23. Jul 2014 14:44

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Aphton (Beitrag 1266438)
Ich find meine Lösung am besten.. Ist ein "Einzeiler" (keine Schleife notwendig) :P

Wennde die noch für 64-bit schreibst, dann bekommste auch nen Fleißbienchen in dein Aufgabenheft: :lol:

DeddyH 23. Jul 2014 14:45

AW: Datum letzter Samstag?
 
DayOfTheWeek gibt es sehr wohl:
Zitat:

Hinweis: DayOfTheWeek ist ISO 8601-konform (Montag ist der erste Wochentag). Die Funktion DayOfWeek basiert dagegen auf dem Sonntag als erstem Wochentag.
Und schon ist das erklärt.

himitsu 23. Jul 2014 14:46

AW: Datum letzter Samstag?
 
Jupp, drumm hatte ich auch beide Funktionen erwähnt und verlinkt.

Zitat:

Zitat von Stevie (Beitrag 1266441)
Wennde die noch für 64-bit schreibst, dann bekommste auch nen Fleißbienchen in dein Aufgabenheft: :lol:

ARM (iOS, Android), Mac und Linux nicht vergessen. :stupid:

p80286 23. Jul 2014 14:47

AW: Datum letzter Samstag?
 
Aus der OH:

Zitat:

DayOfWeek gibt den Wochentag zum angegebenen Datum als Integer zwischen 1 und 7 zurück. Dabei ist Sonntag Tag 1 und Samstag Tag 7.
Hinweis:
DayOfWeek ist nicht mit dem ISO 8601-Standard konform, in dem Montag als der erste Tag der Woche definiert wird. Die Funktion DayOfTheWeek stimmt mit dem ISO 8601-Standard überein.
Kommt drauf an wie man es sieht

Gruß
K-H

Aphton 23. Jul 2014 14:53

AW: Datum letzter Samstag?
 
Off-By-One Fehler.. na und :P
Edit: Tut im Grunde genau #3 hab mich nur um "1" vertan

Dejan Vu 23. Jul 2014 15:00

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1266424)
Delphi-Quellcode:
result := Date - DayOfWeek(Date);

Eine schöne Lösung, die aber stillschweigend davon ausgeht, das der Samstag mit 7 kodiert wird. Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar. Zudem wird eine Portierung in eine andere Sprache hier vermutlich nicht funktionieren.

So schön, minimalistisch und elegant Uwes Lösung auch ist, ich würde vielleicht doch eine Schleife bevorzugen:
Delphi-Quellcode:
Function LastSaturday(Date : TDateTime) : TDateTime;
Const
  DaySaturday = 7;

Begin
  Result := Date - 1;
  While DayOfWeek(Result) <> DaySaturday do Result := Result - 1;
End;
Hier ist es vollkommen egal, was DayOfWeek liefert (enum, integer, string etc.) Die Version läuft immer und überall (solange es Samstage gibt).

Alternative: ISO-8601-Routine verwenden;
Delphi-Quellcode:
function LastSaturday (aDate : TDateTime) : TDateTime;
Var
  LastSunday : TDateTime;
Begin
  LastSunday := EndOfTheWeek(aDate-7);
  Result := LastSunday - 1;
End;
Laut ISO ist der letzte Tag der Woche der Sonntag. Und die ISO ändert sich nicht, außer bei Übernahme durch Außerirdische/Nordkorea.

Stevie 23. Jul 2014 15:05

AW: Datum letzter Samstag?
 
Zitat:

Zitat von himitsu (Beitrag 1266443)
Jupp, drumm hatte ich auch beide Funktionen erwähnt und verlinkt.

Zitat:

Zitat von Stevie (Beitrag 1266441)
Wennde die noch für 64-bit schreibst, dann bekommste auch nen Fleißbienchen in dein Aufgabenheft: :lol:

ARM (iOS, Android), Mac und Linux nicht vergessen. :stupid:

Das wär die Bonusaufgabe für Streber gewesen :stupid:

P.S. Die Lösung von Uwe in ne Methode verpackt (wenn man will noch nen inline dran geklatscht) ist sogar ein paar Ticks schneller als die asm Implementierung. Soviel zu "ick schreib det ma in assembla, det is schnella" ;)

Zitat:

Zitat von Dejan Vu (Beitrag 1266447)
Eine schöne Lösung, die aber stillschweigend davon ausgeht, das der Samstag mit 7 kodiert wird. Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar.

Das ist fast genauso wahrscheinlich wie eine "Übernahme durch Außerirdische/Nordkorea."

Zitat:

Zitat von Dejan Vu (Beitrag 1266447)
Delphi-Quellcode:
function LastSaturday (aDate : TDateTime) : TDateTime;
Var
  LastSunday : TDateTime;
Begin
  LastSunday := EndOfTheWeek(aDate-7);
  Result := LastSunday - 1;
End;

EndOfTheWeek ruft übrigens StartOfTheWeek auf, was wiederrum DayOfTheWeek aufruft.
Dann doch lieber gleich:
Delphi-Quellcode:
function LastSaturday(aDate: TDateTime): TDateTime;
begin
  Result := aDate - DayOfTheWeek(aDate) - 1;
end;

himitsu 23. Jul 2014 15:11

AW: Datum letzter Samstag?
 
So als LastWeekDay/Next... (oder so) würde das auch gut in die DateUtils vom XE9 passen. (bzw. als Helper ans TDateTime dran)


Im Delphi gibt/gab es mal 3 Kodierungen, in verschiedenen Funktionen.

Kombinationen aus
1..7 oder 0..6
und
So..Sa oder Mo..So

Dejan Vu 23. Jul 2014 15:17

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Stevie (Beitrag 1266449)
Zitat:

Zitat von Dejan Vu (Beitrag 1266447)
...Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar.

Das ist fast genauso wahrscheinlich wie eine "Übernahme durch Außerirdische/Nordkorea."

Schön, das Du meine Anmerkung bestätigst. Es ist denkbar, und das reicht für mich als kleiner design flaw. Zudem ist der Code unverständlich (man muss das Manual/OH zitieren, um zu verstehen, was da abgeht). Die Schleife ist sofort durchschaubar, die ISO-Variante auch. Beides ist unwesentlich länger, ergo akzeptabel und eventuell zu bevorzugen.
Zitat:

Zitat von Stevie (Beitrag 1266449)
EndOfTheWeek ruft übrigens StartOfTheWeek auf, was wiederrum DayOfTheWeek aufruft.
Dann doch lieber gleich:

Ich schlage mich nicht mit Implementierungsdetails einer API herum. Sie bietet mir 'EndOfTheWeek' und das verwende ich dann. Geht es um Nichtverwendung von API-Aufrufen oder um Verständnis des Codes? Sei wenigstens so konsequent und ersetze dann 'DayOfTheWeek' gleich durch den Formelsalat, der vermutlich dahintersteht? ;-)

Stevie 23. Jul 2014 21:36

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1266454)
Ich schlage mich nicht mit Implementierungsdetails einer API herum. Sie bietet mir 'EndOfTheWeek' und das verwende ich dann. Geht es um Nichtverwendung von API-Aufrufen oder um Verständnis des Codes? Sei wenigstens so konsequent und ersetze dann 'DayOfTheWeek' gleich durch den Formelsalat, der vermutlich dahintersteht? ;-)

Nu werd ma nich polemisch ;-) Man sollte schon verstehen, wie eine API funktioniert. DayOfTheWeek ist genauso Teil der API, wie EndOfTheWeek. Derjenige, der aber weiß, wie die API funktioniert und dass letztlich die DayOfTheWeek für die anderen Funktionen aufgerufen wird, kann dann direkt diese Funktion benutzen. Es war lediglich ein Hinweis, wie man das schmerzfrei optimieren kann, da ja bekannt ist, wie miserabel der Compiler (je nach Version) Float Results optimiert (bzw nicht).

Außerdem ist der Algorithmus:
- gib mir den Tag der Woche, wobei Montag 1 und Sonntag 7 ist und
- ziehe diesen vom Datum ab, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag

wohl kaum schwerer zu verstehen als:
- ziehe eine Woche vom Datum ab und
- gib mir davon den letzten Tag dieser Woche, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag

Uwe Raabe 23. Jul 2014 21:56

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Stevie (Beitrag 1266476)
Außerdem ist der Algorithmus:
- gib mir den Tag der Woche, wobei Montag 1 und Sonntag 7 ist und
- ziehe diesen vom Datum ab, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag

wohl kaum schwerer zu verstehen als:
- ziehe eine Woche vom Datum ab und
- gib mir davon den letzten Tag dieser Woche, das ergibt den letzten Sonntag,
- dann nochmal eins abziehen und ich hab den letzten Samstag

Funktioniert leider beides nicht an einem Sonntag...

Uwe Raabe 23. Jul 2014 21:59

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!

Namenloser 23. Jul 2014 22:03

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.

Stevie 23. Jul 2014 22:05

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1266480)
Funktioniert leider beides nicht an einem Sonntag...

Haha, das passiert, wenn die eigtl richtige Antwort direkt am Anfang gegeben wird, irgendwer dran rummäkelt und man sich davon einfach blenden lässt und man das denken einstellt. :wall:

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 :)

Zoot 24. Jul 2014 06:11

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1266447)
Eine schöne Lösung, die aber stillschweigend davon ausgeht, das der Samstag mit 7 kodiert wird. Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar. Zudem wird eine Portierung in eine andere Sprache hier vermutlich nicht funktionieren.

So schön, minimalistisch und elegant Uwes Lösung auch ist, ich würde vielleicht doch eine Schleife bevorzugen:
Delphi-Quellcode:
Function LastSaturday(Date : TDateTime) : TDateTime;
Const
  DaySaturday = 7;

Begin
  Result := Date - 1;
  While DayOfWeek(Result) <> DaySaturday do Result := Result - 1;
End;
Hier ist es vollkommen egal, was DayOfWeek liefert (enum, integer, string etc.) Die Version läuft immer und überall (solange es Samstage gibt).

Diese Version ist aber doch genauso abhängig davon, wie die Wochentage kodiert sind, da du nunmal DayOfWeek verwendest.
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...

Sir Rufo 24. Jul 2014 06:36

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. Delphi-Referenz durchsuchenSystem.DateUtils.DayOfTheWeek

Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten
Delphi-Quellcode:
DaySaturday
.

Delphi-Quellcode:
uses DateUtils;

Function LastSaturday(Date : TDateTime) : TDateTime;
Begin
  Result := Date - 1;
  While DayOfTheWeek(Result) <> DaySaturday do Result := Result - 1;
End;
Ich halte es aber für sehr unwahrscheinlich, dass sich die eine oder andere Funktion ändern wird :)

himitsu 24. Jul 2014 07:21

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1266491)
Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten
Delphi-Quellcode:
DaySaturday
.

Wobei man das, wie bereits erwähnt, dennoch mathematisch lösen kann.

Und gleichzeitig wird die Formel dann für alle Wochentage funktionieren. (wenn man nicht die speziell, für den Samstag, gekürzte Version verwendet)

Zoot 24. Jul 2014 07:23

AW: Datum letzter Samstag?
 
Noch ein Vorschlag ohne Schleife.

Delphi-Quellcode:
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;
LastDow(Date, DayFriday) sollte dann den 18.7. ergeben.

Sir Rufo 24. Jul 2014 07:23

AW: Datum letzter Samstag?
 
Zitat:

Zitat von himitsu (Beitrag 1266495)
Zitat:

Zitat von Sir Rufo (Beitrag 1266491)
Egal welcher Wert für Samstag zurückgegeben wird, dieser Wert ist gleich dem Wert der Konstanten
Delphi-Quellcode:
DaySaturday
.

Wobei man das, wie bereits erwähnt, dennoch mathematisch lösen kann.

Und gleichzeitig wird die Formel dann für alle Wochentage funktionieren. (wenn man nicht die speziell, für den Samstag, gekürzte Version verwendet)

Ja, aber da wollte ich nicht weiter drauf eingehen ;)

Uwe Raabe 24. Jul 2014 07:27

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1266491)
Ich halte es aber für sehr unwahrscheinlich, dass sich die eine oder andere Funktion ändern wird :)

Gerade Delphi ist in Bezug auf Abwärtskompatibilität ziemlich konservativ. Die Einführung von DayOfTheWeek als ISO-konformes Pendant zu DayOfWeek unterstreicht das nochmal.

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.

baumina 24. Jul 2014 07:49

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.

Stevie 24. Jul 2014 08:43

AW: Datum letzter Samstag?
 
Zitat:

Zitat von baumina (Beitrag 1266502)
8-) dass so eine süße kleine Frage so viel Grundlage bietet, dass ich hier 29 Beiträge dazu lesen durfte.

Sommerloch :lol:

Dejan Vu 24. Jul 2014 09:07

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Zoot (Beitrag 1266489)
Diese Version ist aber doch genauso abhängig davon, wie die Wochentage kodiert sind, da du nunmal DayOfWeek verwendest.

Mist, das kommt davon, wenn man die Konstante 'DaySaturday' selbst definiert. Die ursprüngliche Version ging natürlich davon aus, das das in den Utilities deklariert ist (was sie zu meinem Erstaunen aber nicht ist). Daher auch die Anmerkung 'egal ob string, enum oder integer'.

Es sollte auch Unittests zu Posts geben. :oops:

Zitat:

Zitat von Stevie (Beitrag 1266509)
Sommerloch :lol:

Prust.

AlexII 24. Jul 2014 09:46

AW: Datum letzter Samstag?
 
Wow... das ist ja fast wie die Relativitätstheorie. :roteyes:

Und letzter Sonntag wäre dann?
Delphi-Quellcode:
 result := Date - DayOfWeek(Date) + 1;

Sir Rufo 24. Jul 2014 09:48

AW: Datum letzter Samstag?
 
Zitat:

Zitat von AlexII (Beitrag 1266515)
Wow... das ist ja fast wie die Relativitätstheorie. :roteyes:

Und letzter Sonntag wäre dann?
Delphi-Quellcode:
 result := Date - DayOfWeek(Date) + 1;

Nur, wenn der aktuelle Tag kein Sonntag ist :warn:

Sir Rufo 24. Jul 2014 09:58

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Zoot (Beitrag 1266496)
Noch ein Vorschlag ohne Schleife.

Delphi-Quellcode:
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;
LastDow(Date, DayFriday) sollte dann den 18.7. ergeben.

Kleine Verbesserung :)
Delphi-Quellcode:
Function LastDow (const DateToMatch : TDateTime; const DowToMatch : Byte) : TDateTime;
begin
  result := ( DateToMatch - 1 ) - ((DaysPerWeek - DowToMatch + DayOfTheWeek( DateToMatch - 1 )) mod DaysPerWeek);
end;

Zoot 24. Jul 2014 10:47

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1266520)
Kleine Verbesserung :)
Delphi-Quellcode:
Function LastDow (const DateToMatch : TDateTime; const DowToMatch : Byte) : TDateTime;
begin
  result := ( DateToMatch - 1 ) - ((DaysPerWeek - DowToMatch + DayOfTheWeek( DateToMatch - 1 )) mod DaysPerWeek);
end;

ok, das gefällt :thumb:

himitsu 24. Jul 2014 10:53

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Alex_ITA01 (Beitrag 1266439)
Delphi-Quellcode:
  call [B]DayOfWeek[/B] //DayOfTheWeek gibts nicht

Zitat:

Zitat von DeddyH (Beitrag 1266442)
DayOfTheWeek gibt es sehr wohl:

Jupp, man muß nur mal in die OH schauen und bemerken, daß DayOfTheWeek sich in einer anderen (neuen) Unit befindet, welche man natürlich auch einbinden sollte. :stupid:

Delphi-Quellcode:
function LastDow(DowToMatch: Word{selber Typ wie DayOfTheWeek ... k.A. warum es eventuell mehr als 255 Wochentage geben könnte}; DateToMatch: TDate=0; Weeks: Integer=-1): TDateTime;
begin
  if DateToMatch = 0 then
    DateToMatch = Date;
  Result := (DateToMatch - 1) - ((DaysPerWeek - DowToMatch + DayOfTheWeek(DateToMatch - 1)) mod DaysPerWeek) + (Weeks + 1) * DaysPerWeek;
end;

function NextDow(DowToMatch: Word; DateToMatch: TDate=0; Weeks: Integer=+1):
... // NextDow ist ja nicht einfach nur (LastDow + DaysPerWeek), jedenfalls nicht, falls das DateToMatch zufällig bereits der DowToMatch wäre.
Und schon würde es bestimmt gut ins DateUtils rein passen.

Der schöne Günther 24. Jul 2014 11:05

AW: Datum letzter Samstag?
 
Möchte jemand die Behandlung jetzt noch auf verschiedene Zeitzonen erweitern?

AlexII 24. Jul 2014 12:08

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1266536)
Möchte jemand die Behandlung jetzt noch auf verschiedene Zeitzonen erweitern?

Und gleich für alle Tage der Woche oder wenigstens noch für den Sonntag! :thumb:

p80286 24. Jul 2014 12:12

AW: Datum letzter Samstag?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1266536)
Möchte jemand die Behandlung jetzt noch auf verschiedene Zeitzonen erweitern?

Das ist wohl nicht notwendig, da die Fragestellung sich vordergründig auf den Standort des Fragenden bezieht. Auch wenn man an den Datumsübergang denkt ist es überflüssig, da der Wochentag und das Datum streng aneinander gebunden sind. Wenn sich der Wochentag ändert, dann ändert sich auch das Datum.
Aber wie wär es hier mit:
London 7.00 Sonntag Vormittag welcher Wochentag ist in Wellington

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Seite 1 von 2  1 2      

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