← Back to team overview

sslug-teknik team mailing list archive

Re: Beregne antal arbejdsdage

 

On Mon, Feb 20, 2006 at 12:46:05PM +0100, Poul Møller Hansen wrote:
> Jeg sidder og grubler over hvordan man beregner antallet af arbejdsdage
> mellem 2 datoer.
> 
> Jeg formoder at man skal gennemløbe alle dage i perioden og undlade 
> lørdage/søndage, men hvordan tager man højde for helligdage ?

...
du kan evt. også se i :
http://home3.inet.tele.dk/frda/src/testdate.c

Løsningen sker stort set med matematik ved beregning
af en "faktor" som er antal dage siden en virtuel år 0.

long factor(DateRec *tm)
{
  unsigned int  y,m;

  y = tm->year;
  m = tm->month;
  if ( tm->month < 3 ) {  y--; m += 12; }
  return 365UL*y + y/4UL -((y/100+1)*3)/4 +(m*3060-9135)/100 + tm->day+59;
}

ugedage klares  med "mod 7"  af denne faktor,
og afstand mellem to datoer er difference.

Formlen bygger på at man kan plotte alle dage i året ind
startene med 1. marts.
Så findes en linie der rammer punkterne rimeligt godt
og udfra det kan man få en 1 til 1 overenstemmelse med
faktor og dato. 
Eneste mindre problem  er skuddår og årstal der er
delelig med 100 og 400, så det korrigeres der for.


> De faste helligdage er indlysende, men påsken er den første søndag
> efter den første fuldmåne efter forårsjævndøgn ....
> 
> Er der nogen der har en løsning på det ?

Der er vist gode links, det kan løses med en "formel/algoritme",
men påske er vist også noget der besluttes officielt,
så måske en liste med de vedtagne påskedatoer er ligeså god.?

-- 
mvh Frank Damgaard  | 



References