Avatar billede yHec Novice
12. marts 2004 - 10:42 Der er 7 kommentarer og
2 løsninger

Finde forskellen i dage

Jeg har et problem!

Hvordan trækker man to datoer (Ttimedate) fra hinanden (eller lægger dem sammen for den sags skyld) og får forskellen i dage?

Jeg har fiflet lidt med

var
x: Tdatetime;
begin
x:=datetostr(now)-dattostr(en_dato);
end;

Så får jeg en fejlmelding omkring noget type mismatch.

Belastende!
Avatar billede snowball Novice
12. marts 2004 - 11:21 #1
x:=datetostr(now-en_dato);

Variablen en_dato skal vel at mærke også være af typen TDateTime.
Avatar billede yHec Novice
12. marts 2004 - 11:51 #2
Ok, Snowball, dem får du altså ikke....

Jeg tager den lige igen med lidt flere detaljer..

Jeg har en form (datoform) som indeholder 3 editbokse (dag1, dag2, forskel). Jeg skal have det stupide program til at trække "dag2" fra "dag1" og smide reultatet i "forskel"....

Mit eneste problem er at få resultatet ud i dage...

Jeg har da oplevet at trække en dag i april 2004 fra en dag i marts 2004 og resultatet bliver noget i retning af 26-11-1926...

Alle variable osv er selvfølgelig blevet tildelt Tdatetime (snowball)

Der må  være en elegant måde at gøre det på!

Jeg véd at man i VBA bare trækker to datoer fra hinanden, og vips så kommer forskellen i dage! Smart. Men nu vil jeg altså lave programmet delphi (4)!

Nogen forslaw??

Jan
Avatar billede nop Nybegynder
12. marts 2004 - 12:09 #3
Jeg ved ikke så meget om D4, men TdateTime er et tal i dage, egentligt, så snowballhar ret, han skulle bare skrive forskel:=int(datotil-datofra);
--nop
Avatar billede nop Nybegynder
12. marts 2004 - 12:10 #4
håber int findes i D4...
Avatar billede snowball Novice
12. marts 2004 - 12:37 #5
Showmessage(FloatToStr(StrToDate(Edit1.Text) - StrToDate(Edit2.Text)) + ' days between of this dates');

Den virker :)
Avatar billede hrc Mester
12. marts 2004 - 16:23 #6
Jeg må lige kommentere: VB's løsning er inkonsistent og rodet. Delphi's TDateTime er meget meget smartere. Du har en double (decimaltal) hvor heltalsdelen viser antallet af dage, mens decimaldelen viser antallet af milisekunder siden dagens start. Vil du finde forskellen mellem to datoer, så:

var
  Nu, Foer : TDateTime;
begin
  Foer := 3000; // 3 tusinde dage siden Delphi år nul.
  Nu := now;

  i := DaysBetween(nu,foer); // Eller: int(nu-foer);

  Edit1.Text := format('Forskellen mellem %s og %s er %d dage',
                      [StrToDate(nu),StrToDate(foer),i]);
end;
Avatar billede snowball Novice
12. marts 2004 - 17:25 #7
hrc: Ud over et par fejl i dit eksempel, så mangler du bare lige at fortælle at DaysBetween liger i DateUtils unit'en som først følger med Delphi i version 6-7 stykker ;)

var
  i: Integer;
  Nu, Foer: TDateTime;
begin
  Foer := 3000; // 3 tusinde dage siden Delphi år nul.
  Nu := now;
  i := DaysBetween(nu,foer); // Eller: int(nu-foer);
  Edit1.Text := format('Forskellen mellem %s og %s er %d dage',[DateToStr(nu),DateToStr(foer),i]);
end;
Avatar billede hrc Mester
12. marts 2004 - 17:50 #8
Ja. Der var faktisk to fejl, beklager. Jeg har aldrig brugt DaysBetween idet jeg ikke kunne forestille mig andet end at det var andet end følgende:

  if ANow < AThen then
    Result := AThen - ANow
  else
    Result := ANow - AThen;

Og husk, y. Alt hvad VB kan, kan Delphi gøre bedre (og smukkere)!
/hrc
Avatar billede yHec Novice
13. marts 2004 - 15:35 #9
Snowball, du får den, selvom du liige havde gelem den der detajle med milisekunderne siden dagens start...

Nu virker det!

hrc> jeg er helt enig! Men det er vist også et spørgsmål om religion..... :-))
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

IT-JOB

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

Capgemini Danmark A/S

Microsoft AI Solution Architect

Rambøll Management Consulting

Senior Software Engineer

TD SYNNEX Denmark ApS

Sales Coordinator