WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Lista över röda dagar (https://www.wn.se/forum/showthread.php?t=30574)

Jonathan P 2008-07-16 11:26

Finns det någon här som har en lista över alla röda dagar för i år och de närmsta åren framåt?

Jag behöver en sådan lista i en applikation jag håller på att jobba på och tänkte att jag kan väl inte vara den första som stöter på det problemet. :)

HenSod 2008-07-16 11:36

Ta en kalender eller dagbok vilken som helst så ser du vilka dagar som är röda dagar. Sedan är det bara att införa dem i din applikation.

tartareandesire 2008-07-16 11:50

Citat:

Originally posted by HenSod@Jul 16 2008, 11:36
Ta en kalender eller dagbok vilken som helst så ser du vilka dagar som är röda dagar. Sedan är det bara att införa dem i din applikation.

Finns det någon bra kalender för flera år framöver?

Jonathan P 2008-07-16 11:52

Citat:

Originally posted by HenSod@Jul 16 2008, 11:36
Ta en kalender eller dagbok vilken som helst så ser du vilka dagar som är röda dagar. Sedan är det bara att införa dem i din applikation.
http://home2.owc.net/~mojow/civic/pi...ainObvious.jpg

digiArt 2008-07-16 11:59

http://www.riksdagen.se/webbnav/index.aspx...11&bet=1989:253

kullervo 2008-07-16 12:10

Citat:

Originally posted by digiArt@Jul 16 2008, 10:59
http://www.riksdagen.se/webbnav/index.aspx...11&bet=1989:253

"påskdagen: söndagen närmast efter den fullmåne som infaller på eller närmast efter den 21 mars"

Hur skriver man en SQL-sats som får fram det? :)

Jonathan P 2008-07-16 12:16

Citat:

Originally posted by kullervo@Jul 16 2008, 12:10
"påskdagen: söndagen närmast efter den fullmåne som infaller på eller närmast efter den 21 mars"

Hur skriver man en SQL-sats som får fram det? :)

Det är nog inte så optimalt att försöka få fram i en SQL-sats, men såhär ser det ut i PHP:

Kod:

function calculate_easter($y) {
  // In the text below, 'intval($var1/$var2)' represents an integer division neglecting
  // the remainder, while % is division keeping only the remainder. So 30/7=4, and 30%7=2
  //
  // This algorithm is from Practical Astronomy With Your Calculator, 2nd Edition by Peter
  // Duffett-Smith. It was originally from Butcher's Ecclesiastical Calendar, published in
  // 1876. This algorithm has also been published in the 1922 book General Astronomy by
  // Spencer Jones; in The Journal of the British Astronomical Association (Vol.88, page
  // 91, December 1977); and in Astronomical Algorithms (1991) by Jean Meeus.

  $a = $y%19;
  $b = intval($y/100);
  $c = $y%100;
  $d = intval($b/4);
  $e = $b%4;
  $f = intval(($b+8)/25);
  $g = intval(($b-$f+1)/3);
  $h = (19*$a+$b-$d-$g+15)%30;
  $i = intval($c/4);
  $k = $c%4;
  $l = (32+2*$e+2*$i-$h-$k)%7;
  $m = intval(($a+11*$h+22*$l)/451);
  $p = ($h+$l-7*$m+114)%31;
  $EasterMonth = intval(($h+$l-7*$m+114)/31);  // [3 = March, 4 = April]
  $EasterDay = $p+1;  // (day in Easter Month)
 
  return format_date($y, $EasterMonth, $EasterDay);
}

Eller så använder man bara den inbyggda funktionen easter_date ;)
http://se2.php.net/easter_date

eliasson 2008-07-16 12:39

Citat:

Ursprungligen postat av Jonathan P
Citat:

Ursprungligen postat av HenSod
Ta en kalender eller dagbok vilken som helst så ser du vilka dagar som är röda dagar. Sedan är det bara att införa dem i din applikation.


Haha, den bilden var helt underbar :D

SkyNet 2008-07-16 13:29

Citat:

Originally posted by Jonathan P@Jul 16 2008, 10:26
Finns det någon här som har en lista över alla röda dagar för i år och de närmsta åren framåt?
När jag undrar om allmänna helgdagar så kollar jag på http://victor.se/bjorn/holidays.php, funkar bra om man vill "förprogrammera" ett antal år i förväg.

Jonathan P 2008-07-16 14:38

Jag skrev en PHP-funktion som räknar ut helgdagarna åt mig automatiskt, så jag slipper mata in varje år för sig...

Kod:

        /**
 * Räknar ut helgdagar för ett givet år.
 * Notera att alla dessa dagar inte är "röda dagar" enligt definitionen, men att många är lediga från arbetet dessa dagar.
 *
 * @param $år int
 * @return array
 * @author Jonathan Persson ([email protected])
 */
        function rödaDagar($år) {
 $dygn = 60*60*24; // antal sekunder på ett dygn
 
 $påskdagen = easter_date($år);
 
 // räkna ut när långfredagen är.
 $i = 0;
 while(!isset($långfredagen)) {
        $i++;
        $dag = $påskdagen-($i*$dygn);
       
        if(date("N", $dag) == 5)
  $långfredagen = $dag;
 }
 
 // räkna ut när midsommardagen är.
 for($i=$år."0620"; $i<$år."0626"; $i++) {
        if(date("N", strtotime($i)) == 6)
  $midsommardagen = strtotime($i);
 }
 
 // räkna ut när alla helgons dag är.
 for($i=$år."1101"; $i<$år."1106"; $i++) {
        if(date("N", strtotime($i)) == 6)
  $alla_helgons_dag = strtotime($i);
 }
 
 // om ingen av dagarna mellan 1/11 och 6/11 är en lördag så är alla helgons dag 10/31.
 if(!isset($alla_helgons_dag))
        $alla_helgons_dag = strtotime("$år-10-31");
 
 return array(
        "Nyårsdagen" => "$år-01-01",
        "Trettondedag jul" => "$år-01-06",
        "Skärtorsdagen " => date("Y-m-d", $långfredagen-(1*$dygn)),
        "Långfredag" => date("Y-m-d", $långfredagen),
        "Påskdagen" => date("Y-m-d", $påskdagen),
        "Annandag påsk" => date("Y-m-d", $påskdagen+(1*$dygn)),
        "Valborgsmässoafton " => "$år-04-30",
        "Första maj" => "$år-05-01",
        "Kristi himmelsfärdsdag" => date("Y-m-d", $påskdagen+(39*$dygn)),
        "Pingstdagen" => date("Y-m-d", $påskdagen+(49*$dygn)),
        "Sveriges nationaldag" => "$år-06-06",
        "Midsommardagen" => date("Y-m-d", $midsommardagen),
        "Alla helgons dag" => date("Y-m-d", $alla_helgons_dag),
        "Julafton" => "$år-12-24",
        "Juldagen" => "$år-12-25",
        "Annandag jul" => "$år-12-26",
        "Nyårsafton" => "$år-12-31"
 );
        }



Alla tider är GMT +2. Klockan är nu 21:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson