Obliczenie ilości dni

0

Witam.
Mam następujący dylemat. Potrzebuję obliczyć ilość dni z okresu który wybieram poprzez komponenty TDateTimePicker. Niestety funkcja DaysBeetwen mi nie odpowiada, gdyż zwrócona liczba jest o jeden mniejsza niż w rzeczywistości. Czy jest jakaś inna możliwość obliczenia ilości dni pomiędzy dwoma datami w pełnym zakresie?? Czy tylko poprzez obejście poprzez dodanie 1 do wyniku funkcji DaysBeetween??

0

Tu masz nawet taki mojej produkcji co Ci zliczy ilosc minut :D, a jak nie potrzebujesz takiej dokładności to wyrzuc tam przemnozenie razy minuty:P

Function ROKPRZESTEPNY(rok:integer):boolean;
begin
if ((rok mod 4 = 0) and (rok mod 100 <> 0)) or (rok mod 400 = 0) then
result := true
else
result := false;
end;

function ILOSCMINUTPOMIEDZYDATAMI(data1,data2:TDateEdit; godzina1,godzina2:TMaskEdit):integer;
var dzien1,mies1,rok1,dzien2,mies2,rok2,dzien,miesiac,rok,godz1,min1,godz2,min2:integer;
m:array[1..12]of integer;
iloscdni,iloscdni2:integer;
licznik,x,y,minuta :integer;
licz:boolean;
label L;
begin
licz := false;
rok1 := strtoint(copy(data1.text,1,4)); mies1 := strtoint(copy(data1.text,6,2)); dzien1 := strtoint(copy(data1.text,9,2));
rok2 := strtoint(copy(data2.text,1,4)); mies2 := strtoint(copy(data2.text,6,2)); dzien2 :=strtoint(copy(data2.text,9,2));
godz1 := strtoint(copy(godzina1.text,1,2)); min1 := strtoint(copy(godzina1.text,3,2));
godz2 := strtoint(copy(godzina2.text,1,2)); min2 := strtoint(copy(godzina2.text,3,2));

//sprawdzanie poprawnosci dat
if rok2>rok1 then licz := true else
if (rok2=rok1) and (mies2>mies1) then licz := true else
if (rok2=rok1) and (mies2=mies1) and (dzien2>dzien1) then licz := true else
if (rok2=rok1) and (mies2=mies1) and (dzien2=dzien1) and (godz2>godz1) then licz := true else
if (rok2=rok1) and (mies2=mies1) and (dzien2=dzien1) and (godz2=godz1) and (min2>min1) then licz := true;

m[1] := 31; if ROKPRZESTEPNY(rok1) then m[2] := 29 else m[2] := 28;
m[3] := 31; m[4] := 30; m[5] := 31; m[6] := 30; m[7] := 31; m[8] := 31; m[9] := 30; m[10] := 31; m[11] := 30; m[12] :=31;
licznik :=0;
//x:=mies1;
if licz = true then begin
repeat
if mies1 = 2 then if ROKPRZESTEPNY(rok1) then m[2] := 29 else m[2] := 28;
y:= m[mies1];
for x:= dzien1 to y do
if (x=dzien2)and(mies1=mies2)and(rok1=rok2) then goto L else licznik := licznik+1;
mies1:= mies1+1; dzien1:=1; if mies1 = 13 then begin
mies1:=1;
rok1:= rok1+1;
end;
until (rok1=rok2)and(mies1=mies2)and(dzien1=dzien2);
L:
//result := licznik;
minuta := licznik2460; // wynik w minutach
minuta := minuta + godz2 * 60 + min2 - godz1*60 - min1;
result := minuta;
end else begin
result := 0;
end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1