Avatar billede azs Nybegynder
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
Avatar billede mjohansen Nybegynder
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
???
Avatar billede hreiff Nybegynder
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;
Avatar billede hreiff Nybegynder
03. april 2003 - 10:31 #3
Muligvis et svar
Avatar billede azs Nybegynder
03. april 2003 - 14:24 #4
prøver lige ;)
Avatar billede azs Nybegynder
03. april 2003 - 14:44 #5
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
Avatar billede hreiff Nybegynder
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)
Avatar billede hreiff Nybegynder
03. april 2003 - 15:43 #7
dvs funktionen starter således:

begin
  ToGo := tTime - now;
  if ToGo <0 then
    strInfo := 'Dato Overskredet'
  else
Avatar billede azs Nybegynder
03. april 2003 - 20:05 #8
tak for hjælpen ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester