skindbeni Nybegynder
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?
kroning Nybegynder
11. maj 2006 - 18:07 #1
Hvad med helligdage skal der tages højde for dem?
kroning Nybegynder
11. maj 2006 - 18:16 #2
Men ellers har jeg søgt lidt her og der og det ser ikke ud til at der findes en færdig function til det, så man må nok i gang selv.
kroning Nybegynder
12. maj 2006 - 23:33 #3
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;
skindbeni Nybegynder
14. maj 2006 - 13:26 #4
Hej Harald.

Tak for svar. Point til dig som mange tak for hjælpen.

De bedste hilsener
Michael Sørensen
kroning Nybegynder
14. maj 2006 - 17:02 #5
ok
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

Opret Preview

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





CIO
Bliv klar til EU-persondataforordningen: Ministerium klar med længe ventet dansk vejledning til den nye EU-lov
Justitsministeriet er efter en måneds forsinkelse klar med den store vejledning til EU's kommende persondataforordning, der kommer til at få konsekvenser for alle danske virksomheder. Se vejledningen her.
Comon
Microsofts vilde - og hammerdyre - Surface Studio kommer til Danmark
Microsofts all-in-one-computer, Surface studio, kommer til Danmark midt i juni til en vild pris
Job & Karriere
Dansk it-firma masseansætter: Skal bruge 90 nye medarbejdere med disse it-profiler
It-virksomheden BEC skal bruge 90 nye it-medarbejdere. Her kan du se de konkrete it-profiler, BEC er på udkig efter.
White paper
Hyperconverged infrastructure - Sådan optimeres datacentret på den enkleste og mest fremtidssikrede måde
Datacenteret i en virksomhed er en kompliceret og kostbar størrelser, som ikke ligefrem gør det nemt og hurtigt for it-afdelingen at hjælpe forretningen med nye initiativer. Det er en uholdbar situation, og nu findes der en løsning. Hyperconverged infrastructure kan løfte datacenteret ind i fremtiden. Et datacenter-i-en-boks kan sættes i sving på 20 minutter, det er let at administrere og kan opskaleres på fem minutter. Det hele er testet og konfigureret på forhånd, og tilmed er ydelsen er på enterprise-niveau. Læs mere i dette white paper.