11. maj 2006 - 18:00
Der er
3 kommentarer og
2 løsninger
Antal arbejdsdage
Hej.
Excel har en funktion antal.arbejdsdage(x1,x2,0) der beregner antallet af arbejdsdage (dvs. hverdage) mellem to datoer (x1 og x2)
Findes noget tilsvarende, som man kan benytte i Delphi?
Her er en procedure der beregner arbejdsdage, der er muligvis nogle dage der ikke normalt er arbejdsdage men som alligevel tælles med, men dem kan du så selv ligge ind i proceduren. Den skulle regne rigtig mht. helligdage fra nu af og til the end of days.
Husk DateUtils i din uses.
--------------------
function AntalArbejdsdage(Fra, Til : TDate) : integer;
function GetPaaskeDag(AYear : Integer) : TDateTime;
var
a,b,c,e,f,g,
h,i,k,l,o,q : integer;
begin
a:=(AYear mod 19);
b:=(AYear div 100);
c:=(AYear mod 100);
o:=(b div 4);
e:=(b mod 4);
f:=((b+8) div 25);
g:=((b-f+1) div 3);
h:=((19*a+b-o-g+15) mod 30);
i:=(c div 4);
k:=(c mod 4);
l:=((32+2*e+2*i-h-k) mod 7);
q:=((a+11*h+22*1) div 451);
Result:=EncodeDate(AYear,((h+l-7*q+114) div 31),(((h+l-7*q+114) mod 31)+1));
end;
function IsHelligDag(Dato : TDate) : boolean;
var
dd,mm,yy : word;
PaaskeDag : TDate;
begin
Result:=true;
if DayOfTheWeek(Dato)=7 then //Søndage
exit;
DecodeDate(Dato,yy,mm,dd);
PaaskeDag:=GetPaaskeDag(yy);
if (dd=1) and (mm=1) then // Nytårsdag (1/1)
exit;
if (dd=25) and (mm=12) then // Julen (25/12) + (26/12)
exit;
if (dd=26) and (mm=12) then // Julen (25/12) + (26/12)
exit;
if (PaaskeDag-3=Dato) then // Påskedag-3 Skærtorsdag
exit;
if (PaaskeDag-2=Dato) then // Påskedag-2 Langfredag
exit;
if (PaaskeDag=Dato) then // Påskedag
exit;
if (PaaskeDag+1=Dato) then // Påskedag+1 2. Påskedag
exit;
if (PaaskeDag+26=Dato) then // Store bededag : Påskedag+26
exit;
if (PaaskeDag+39=Dato) then // Kristi himmelfart : Påskedag+39
exit;
if (PaaskeDag+49=Dato) then // Pinsen : Påskedag+49
exit;
if (PaaskeDag+50=Dato) then // 2. Pinsedag : Påskedag+50
exit;
Result:=false;
end;
begin
Result:=0;
while Fra<=Til do
begin
if (DayOfTheWeek(Fra)<6) and (not IsHelligDag(Fra)) then
inc(Result);
Fra:=Fra+1;
end;
end;