Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr.
Seite 1 von 5  1 23     Letzte »    

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