Avatar billede j_jorgensen Nybegynder
27. februar 2005 - 14:28 Der er 7 kommentarer og
1 løsning

Hvordan finder jeg helligdage i kalender?

Hej alle,

Kan jeg hive oplysninger om helligdage ud af .NET frameworket, eller skal der en anden løsning til?
Avatar billede the_ghost Nybegynder
27. februar 2005 - 14:39 #1
Uden at vide for meget om hvad .NET frameworket har at tilbyde på det punkt, vil jeg umidlbart sige at det kan du ikke.

Helligdage er forskellige fra land til land og fra religion til religion, så hvis det var muligt skulle .NET have dækket sig ind med alle lande og alle religioner.
Avatar billede arne_v Ekspert
27. februar 2005 - 14:40 #2
Jeg mener ikke, at der er noget i .NET selv.

Det ville også være ret svært at vedligeholde. Der er store forskelle
mellem forskellige lande. Og hvis vi reelt snakker fridage, så er der
også både lovgivning og overenskomster som har indflydelse.
Avatar billede j_jorgensen Nybegynder
27. februar 2005 - 14:40 #3
Yeah - men på den anden side har de jo oplysninger om valuta, datoer, klokkeslet osv...så etellerandet sted virker det sandsynligt. Måske hvis man tilgår Outlook-objektmodellen kan man finde noget?  Der ligger jo samtlige helligdage...
Avatar billede coderdk Praktikant
27. februar 2005 - 15:15 #4
Hvis du kan snakke PHP så har jeg et script der kan finde:
Skærtorsdag, langfredag, påskedag, 2. påskedag, kristihimmelfartsdag, pinsedag, 2. pinsedag, juledag, 2.juledag og nytår

Det er påskedag der er den svære!

Det er burde være rimeligt nemt at oversætte til C# eller VB.Net eller hvad du nu koder i ;)
Avatar billede j_jorgensen Nybegynder
27. februar 2005 - 15:27 #5
Hvad er princippet bag scriptet? Det kunne være at jeg kunne oversætte det - kan også PHP nemlig :-) Det lyder interessant!
Avatar billede coderdk Praktikant
27. februar 2005 - 15:31 #6
Ja, jeg kan ikke huske hvad algoritmen hedder, mener det er Gauss formel for at udregne påskedag, her er scriptet, så håber jeg det virker, for jeg har ikke brugt det meget længe ;)

Der er to funktioner du skal bruge isHelligdag( $unixtimestamp ) som returnerer 1 hvis det er en helligdag ellers 0...

helligdag( $aar, $helligdagstype ); giver dig et unixtimestamp for datoen på den ønskede helligdag - $helligdagstype skal være en af de defines() der er f.eks. PINSEDAG...

Råb hvis der er noget ;)

<?php

    define("SKAERTORSDAG",1);
    define("LANGFREDAG",2);
    define("PAASKEDAG",3);
    define("PAASKEDAG2",4);
    define("BEDEDAG",5);
    define("KRISTIHIMMELFARTSDAG",6);
    define("PINSEDAG",7);
    define("PINSEDAG2",8);

    function glrPaaskedag($year)
    {
        if ($year < 1593 || $year > 4099)
            die("Cannot calculate easter for that year! Only 1593-4099!");
       
        $a = (int) ($year / 100);
        $b = (int) ($year % 100);
       
        $c = (int) ((3 * ($a + 25)) / 4);
        $d = (int) ((3 * ($a + 25)) % 4);

        $e = (int) ((8 * ($a + 11)) / 25);

        $f = (int) ((5 * $a + $b) % 19);

        $g = (int) ((19 * $f + $c - $e) % 30);

        $h = (int) (($f + 11 * $g) / 319);

        $j = (int) ((60 * (5 - $d) + $b) / 4);
        $k = (int) ((60 * (5 - $d) + $b) % 4);

        $m = (int) ((2 * $j - $k - $g + $h) % 7);

        $n = (int) (($g - $h + $m + 114) / 31);
        $p = (int) (($g - $h + $m + 114) % 31);

        $day = $p + 1;
        $month = $n;
       
        return mktime(0,0,0,$month,$day,$year);
    }

    function helligdag($year,$helligdagstype)
    {
        // Returnerer datoen for de forskydelige helligdage.
        // Helligdagstypen angives med en af de prædefinerede konstanter
       
        $pdag = glrPaaskedag($year);
        $m = date("n",$pdag);
        $d = date("j",$pdag);
       
        switch ($helligdagstype)
        {
            case SKAERTORSDAG:
                $daymod = -3;
                break;
            case LANGFREDAG:
                $daymod = -2;
                break;
            case PAASKEDAG:
                $daymod = 0;
                break;
            case PAASKEDAG2:
                $daymod = 1;
                break;
            case BEDEDAG:
                $daymod = 26;
                break;
            case KRISTIHIMMELFARTSDAG:
                $daymod = 39;
                break;
            case PINSEDAG:
                $daymod = 49;
                break;
            case PINSEDAG2:
                $daymod = 50;
                break;
        }

        if (isset($daymod))
            return mktime(0,0,0,$m,$d + $daymod,$year);
        else
            return 0;
    }

    function isHelligdag($date)
    {
        // Returnerer 1 hvis $date er en helligdag, 0 hvis ikke

        $year = date("Y",$date);
        $paaskedag = glrPaaskedag($year);

        switch (date("z",$date) - date("z",$paaskedag))
        {
            case SKAERTORSDAG:
            case LANGFREDAG:
            case PAASKEDAG:
            case PAASKEDAG2:
            case BEDEDAG:
            case KRISTIHIMMELFARTSDAG:
            case PINSEDAG:
            case PINSEDAG2:
                return 1;
                break;
            default:
                if ((date("n/j",$date) == '1/1' ) ||  // Nytår
                    (date("n/j",$date) == '12/25' ) || // Juledag
                    (date("n/j",$date) == '12/26' ))  // 2. Juledag
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
        }
    }

?>
Avatar billede j_jorgensen Nybegynder
03. april 2005 - 19:27 #7
En anden løsning blev valgt, og php scriptet dur ikke desværre - omend det nok er tæt på.
Avatar billede j_jorgensen Nybegynder
22. juni 2005 - 16:49 #8
Closed.
Avatar billede 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. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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