---
title: "Kalender och helgdagar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/51164-kalender-och-helgdagar"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Virrdo"
published: "2002-08-24T09:15:51.000Z"
updated: "2002-08-24T17:31:54.000Z"
replies: 8
views: 666
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/51164-kalender-och-helgdagar"
---

# Kalender och helgdagar

## #1 — Virrdo, 2002-08-24T09:15Z

Håller på att göra en kalender där man ska kunna spara "events".
Eftersom den ska rikta sig till svenska användare tänkte jag försöka ordna så att även svenska helgdagar skrivs ut med röd text (precis som lördag/söndag, som jag har det nu). Vissa helgdagar infaller ju tex en torsdag.
Vart kan man få tag på alla svenska helgdagar och hur gör jag enklast för att kolla om en månads dag är en helgdag ?

(Ex. <http://www.fidonet.pp.se/almanacka.php3>)

Permalänk: https://www.webforum.nu/p/51164

## #2 — GoldenPete, 2002-08-24T09:39Z

Du hittar dem i de flesta almanackor som finns på marknaden.

Permalänk: https://www.webforum.nu/p/762055

## #3 — Virrdo, 2002-08-24T09:45Z

Men hur ska jag göra att få ihop dem med respektive dag ? Alla helgdagar infaller ju inte heller på samma dag varje år.

Permalänk: https://www.webforum.nu/p/762059

## #4 — Lasp, 2002-08-24T09:50Z

Det finns regler för de allra flesta men en svensk almenacka kan inte automatgenereras vad jag vet.
Du måste skaffa dig ett underlag
Kolla hur Outlook´s kalenderfiler är uppbyggda.

Permalänk: https://www.webforum.nu/p/762064

## #5 — Nickemannen, 2002-08-24T10:00Z

På något sätt finns det ju ett samband mellan alla, men det är ju olika samband för olika dagar så du kan inte göra en funktion

Permalänk: https://www.webforum.nu/p/762069

## #6 — Virrdo, 2002-08-24T12:23Z

Men på  <http://www.fidonet.pp.se/almanacka.php3> har de uppenbarligen lyckats, så det kan ju inte vara helt omöjligt. Får väl maila dem och se om jag får någe svar.

Permalänk: https://www.webforum.nu/p/762141

## #7 — FlashX, 2002-08-24T14:40Z

Enklast att fixa detta vore väl att lägga årets "udda" helgdagar i en array och sedan jämföra datumet med dem i arrayen. Finns det där, så ska dagen vara röd.

Permalänk: https://www.webforum.nu/p/762205

## #8 — nicclas, 2002-08-24T15:00Z

Det var lite roligt med helgdagar ;) Jag har skrivit ett script som du gärna får prova som hittar "udda" helgdagar, dvs "vanliga" söndagar får du finna själv, det är ju inte så svårt.

Lite kul är att det finns en "formel" för att beräka datumet för påskdagen (hittade på nätet, och omskiven i PHP i  funktionen getEaster()). Baserat på detta datum är det enkelt att bestämma övriga helger.
 

```
<?
function getEaster($year){
  // Algoritm för att hitta påskdagen från boken 
  // "Explanatory Supplement to the Astronomical Almanac", P. Kenneth Seidelmann (red.)
  // som finns på [url]http://astro.nmsu.edu/~lhuber/leaphist.html[/url]
  $C = floor($year/100);
  $N = $year - 19*floor($year/19);
  $K = floor(($C - 17)/25);
  $I = $C - floor($C/4) - floor(($C - $K)/3) + 19*$N + 15;
  $I = $I - 30*floor($I/30);
  $I = $I - floor($I/28)*(1 - floor($I/28)*floor(29/($I + 1))*floor((21 - $N)/11));
  $J = $year + floor($year/4) + $I + 2 - $C + floor($C/4);
  $J = $J - 7*floor($J/7);
  $L = $I - $J;
  $M = 3 + floor(($L + 40)/44);
  $D = $L + 28 - 31*floor($M/4);
  if ($M<10) $M="0".$M;
  if ($D<10) $D="0".$D;
  return "$M-$D"; 
}

function arHelg($datum){
  //
  // (c) nicclas, [url]www.nic-sys.se[/url]
  // 

  //
  // arHelg($datum) - funktion som tar reda på om ett givet datum är en officiell helgdag.
  //                  (utom "vanliga" söndagar).
  // Indata - $datum enligt formatet "YYYY-MM-DD"
  // Returnerar "" om ingen "helgdag", annars en sträng med namnet på helgdagen.
  //
  // Definition på helgdagarna från [url]http://www.jit.se/lagbok/989253t.html[/url]

  $helgdagar=array("01-01" => "Nyårdagen",
	       "01-06" => "Trettondedagen",
	       "05-01" => "Första maj",
	       "12-25" => "Juldagen",
	       "12-26" => "Annandag jul");
  $del=explode("-",$datum);
  $year=$del[0];
  $month=$del[1];
  $day=$del[2];

  $easter=getEaster($year);
  $helgdagar[$easter]="Påskdagen";
 
  $deleaster=explode("-",$easter);
  $easter_stamp  = mktime (0,0,0,$deleaster[0],$deleaster[1],$year);

  $helgdagar[date("m-d",$easter_stamp-60*60*24*2)]="Långfredagen";
  $helgdagar[date("m-d",$easter_stamp+60*60*24)]="Annandagpåsk";
  $helgdagar[date("m-d",$easter_stamp+60*60*24*39)]="Kristi Himmelsfärdsdagen";
  $helgdagar[date("m-d",$easter_stamp+60*60*24*49)]="Pingstdagen";
  $helgdagar[date("m-d",$easter_stamp+60*60*24*50)]="Annandagpingst";
  
  $mid_stamp  = mktime (0,0,0,6,20,$year);
  while(date("w",$mid_stamp)!=6){
    $mid_stamp=$mid_stamp+60*60*24;
  }
  $helgdagar[date("m-d",$mid_stamp)]="Midsommardagen";
  
  $helgon_stamp  = mktime (0,0,0,10,31,$year);
  while(date("w",$helgon_stamp)!=6){
    $helgon_stamp=$helgon_stamp+60*60*24;
  }
  $helgdagar[date("m-d",$helgon_stamp)]="Alla helgons dag";
  
  //  echo "Testutskrift\n";
  //  foreach ($helgdagar as $key=>$datum) {
  //    echo "$key $datum\n";
  //  }
  
  return $helgdagar["$month-$day"];
}

// Testkod:

echo "arHelg(2002-03-31): ";
echo arHelg("2002-03-31")."\n";
echo "arHelg(2002-04-01): ";
echo arHelg("2002-04-01")."\n";

?>
```

Tror att det fungerar åtminstone för år mellan 1970 och 2038! Säg till om du hittar något som inte blev korrekt. 

/nicclas - <https://www.frisim.com>

Permalänk: https://www.webforum.nu/p/762217

## #9 — Virrdo, 2002-08-24T17:31Z

Man tackar, ska pröva det :)
("Vanliga söndagar" dvs helger har jag redan fixat)

Permalänk: https://www.webforum.nu/p/762294

---

Tråden på webben: https://www.webforum.nu/amne/php/51164-kalender-och-helgdagar
