sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #87254
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