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