03. april 2003 - 04:37Der er
6 kommentarer og 2 løsninger
DateTime funktion fejler
Nogen der kan hjælpe med at få min lille DateTime funktion til at virke?
Funktionen ->
function TMainForm.TimeLeft(tDate,tTime :TDateTime): string; var FHour, FMin, FSec, FMlsec: word; strDays, strHour, strMin, strSec, strInfo: string; ToGo: TDateTime; begin ToGo := tTime - Time; DecodeTime(ToGo, FHour, FMin, FSec, FMlsec);
if FSec > 0 then FSec := FSec-1 else begin FSec := 59; if FMin > 0 then FMin := FMin-1 else begin FMin := 59; if FHour > 0 then FHour := FHour-1 else begin FHour := 23 end; end; end;
if strDays = '0' then begin if strHour = '0' then begin if strMin = '0' then strInfo := strSec + 's' else strInfo := strMin + 'm ' + strSec + 's' end else begin strInfo := strHour + 'h ' + strMin + 'm '; end; end else begin strInfo := strDays + 'd ' + strHour + 'h '; end;
Result := strInfo; end;
Når der er under 24 timer til fra den samme tid som er sat virker det ikke! fx. 04-04-2003 - 14:00:00 og så kl bliver 14:00:00 d. 03-04-2003 så begynder den bare og tælle op indtil det bliver d. 04-04-2003 hvor den så tæller normalt som den skal dvs den tænker slet ik på datoen + når der er 1d 0h skal der så stå 23h 59m
I stedet for at have tid og dato i to parametre (tDate og tTime), var det så ikke en idé at have det i een TDateTime parameter og så i første linie sige ToGo := tDatetime - now ???
Jeps, og så det er vældig nemt at kontrollere om der er over eller under 1 dag tilbage:
If ToGo > 1 then {mere end 24 timer tilbage}
Og du kan finde antal dage med:
StrInfo := FloatToStrF(int(ToGo),ffFixed,9999,0); {antal dage som streng - med 1 år som 365 dage}
Her er et eksempel som ikke tæller ned, men bare viser resterende tid:
function TimeLeft(tTime :TDateTime): string; var FHour, FMin, FSec, FMlsec: word; strHour, strMin, strSec, strInfo: string; ToGo: TDateTime; begin ToGo := tTime - now;
If ToGo > 10 then {mere end 10 dage tilbage} strInfo := FloatToStrF(int(ToGo),ffFixed,9999,0) + 'd ' else Begin DecodeTime(ToGo, FHour, FMin, FSec, FMlsec);
If ToGo > 1 then {mere end 1 dage tilbage} strInfo := FloatToStrF(int(ToGo),ffFixed,9999,0) + 'd ' + IntToStr(FHour) + 'h ' else Begin strHour := IntToStr(FHour); strMin := IntToStr(FMin); strSec := IntToStr(FSec);
if strHour = '0' then begin if strMin = '0' then strInfo := strSec + 's' else strInfo := strMin + 'm ' + strSec + 's' end else begin strInfo := strHour + 'h ' + strMin + 'm '; end; end end; Result := strInfo; end;
procedure TForm1.Button1Click(Sender: TObject); begin Label1.caption:=TimeLeft(EncodeDate(2003,6,4)+EncodeTime(10,30,0,0)); end;
lige 1 ting til. hvordan vil jeg kunne checke om en dag har været der ? fx idag er det den 03-04-2003 14:45:00 og så vil jeg så vide om den denne dato/tid har været her 01-04-2003 10:39:00
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.