Avatar billede mysitesolution Nybegynder
07. juni 2003 - 20:14 Der er 13 kommentarer og
1 løsning

Dage fra Dato til Dato

Hvordan laver jeg en funktion der viser hvor mange dage der er imellem 2 datoer?

Jeg har denne, men det er i PHP:
<?
function dageImellem($dato1,$dato2) {
$dato2 = strtotime($dato2);
$dato1 = strtotime($dato1);
$mellem = $dato2-$dato1;
$mellem = $mellem/86400;
return $mellem;
}

echo dageImellem('2002-03-07', '2002-03-15');

?>
Avatar billede hermandsen Juniormester
07. juni 2003 - 20:18 #1
Int(Dato1) - Int(Dato2)
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 20:21 #2
Det kommer da ikke til at virke... hvis det er mere end en måned så vil den sige 1xx dage og ikke 30-60 dage
Avatar billede hermandsen Juniormester
07. juni 2003 - 20:33 #3
Fungerer da fint!!

procedure TForm1.Button1Click(Sender: TObject);

  function DaysBetween(Date1, Date2: TDateTime): Integer;
  begin
    Result := Abs(Round(Int(Date1) - Int(Date2)));
  end;

begin
  ShowMessage(IntToStr(DaysBetween(Date, StrToDate('24-12-2003'))));
end;
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 20:36 #4
ahh... vidste ikke jeg skulle bruge TDateTime... Vil du ikke lave den hvor jeg skal indtaste det som string?
Avatar billede hermandsen Juniormester
07. juni 2003 - 20:40 #5
function DaysBetween(Date1, Date2: String): Integer;
begin
  Result := Abs(Round(Int(StrToDate(Date1)) - Int(StrToDate(Date2))));
end;

Den er da riiimelig let at gennemskue!! :)
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 20:43 #6
jo men hvordan skal strengen se ud?
yyyy-mm-dd
eller
dd-mm-yyyy?
Avatar billede hermandsen Juniormester
07. juni 2003 - 20:53 #7
dd-mm-yyyy

Så vidt jeg ved, så kommer det an på hvordan Delphi/Windows er sat op, men ovenstående fungerer for mig...
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 21:01 #8
Dette virker ikke:

procedure TForm1.FormCreate(Sender: TObject);
var
Dato1: string;
Dato2: string;
begin
Dato1 := '03-05-2002';
Dato1 := '05-06-2002';

showmessage(inttostr(DaysBetween(Dato1, Dato2)));
end;
Avatar billede hermandsen Juniormester
07. juni 2003 - 21:04 #9
Det gør det da!!
Jeg får 33, hvilket vist ikke er helt forkert!!
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 21:06 #10
den siger at det ikke er en gyldig dato....
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 21:07 #11
Ahh.. jo det virker... jeg havde skrevet dato1 to gange... MANGE GANGE TAK...


:)
Avatar billede mysitesolution Nybegynder
07. juni 2003 - 21:25 #12
Har lige lavet den lidt om... der var fejl ved år før


function DaysBetween(Date1, Date2: String): extended;
begin
  Result := Int(StrToDate(Date2)) - Int(StrToDate(Date1));
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Dato1: string;
Dato2: string;
begin
Dato1 := '03-04-2003';
Dato2 := '03-05-2003';

showmessage(floattostr(DaysBetween(Dato1, Dato2)));
end;
Avatar billede pigbear Nybegynder
28. oktober 2003 - 15:33 #13
Hej

Er det nogen af jer kloge hoveder der kan sige mig hvordan jeg laver en datetime dato om til et tal og mest af alt et tal om til en date ?

Jeg tror at jeg har fået lavet datetime datoen om til et tal vha. følgende kode:
Var
dato : TDate;
datotal : Cardinal;
begin
      Dato:=DateTimePicker1.DateTime;
      DatoTal:=Trunc(Dato-encodedate(1980,1,1));
      showmessage('tallet for dato i dtpicker er '+inttostr(datotal));
end;

... men hvordan laver jeg nu tallet om til en dato igen ?

Datotal indeholder værdien 8701 for 28-10-2003
og tallet har jeg så gemt i en database. Når jeg nu skal bruge tallet/datoen igen så har jeg behov for at lavet tallet om til en dato igen for at vise
den pænt i fx den samme datetimepicker.

Er der nogen der har et forslag til dette !

Mvh

PigBear
Avatar billede hermandsen Juniormester
29. oktober 2003 - 14:34 #14
Typen "TDateTime" er egentlig bare en double (en reel tal-variabel).

Den kan aflæses således:

TDateTime starter fra d. 31-12-1979 (hvis jeg husker rigtigt), og så er alle cifrene før kommaet ellers antallet af dage siden den gang. Decimalerne kan aflæses således:

1 time = 1/24
1 minut = 1/24/60
1 sekund = 1/24/60/60
1 milisekund = 1/24/60/60/1000

Længere ned kan du ikke gå...
Håber det var nok!! ;)

//hermandsen
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