03. april 2003 - 04:37
Der 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;
strDays := DateToStr(tDate)+' '+ TimeToStr(tTime);
strDays := IntToStr(DayDiff(now,StrToDateTime(strDays)));
strHour := IntToStr(FHour);
strMin := IntToStr(FMin);
strSec := IntToStr(FSec);
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
03. april 2003 - 10:15
#1
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
???
03. april 2003 - 10:31
#2
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;
03. april 2003 - 15:31
#6
if ToGo < 0 then
showmessage('Dato er overskredet');
(Decode date giver fejl hvis et negativt tal bruges, så start med at kontrollere om ToGo er negativ)