Christian Kragh formulerede spørgsmålet:
> Den 23-04-2012 23:48, Kurt G. skrev:
>> Jeg forsøger at lave en kalender og vil gerne have ugenumrene med.
>> Det er ikke helt enkelt, har jeg fundet ud af!
>> Jeg har lavet en del eksperimenter, men har ikke fundet noget, der
>> virker korrekt!
>> Jeg ved godt, at den første uge i året, hvor torsdag forekommer, er uge
>> 1 her i landet.
>>
>> Er der her nogen, som har en opskrift!
>>
>> Mvh Kurt
>
> Hvordan udregner du helligdage, eller har du selv markeret dem i kalenderen?
>
> Jeg har lavet et script der udregner (godtnok i asp) men du kan bruge det som
> inspiration til at generere det dynamisk, det ligger her:
>
http://5mm.dk/helligdage.asp
Interessant og overraskende.
1. maj falder i år på Grundlovsdag: 5-6-2012... ?
:/ ^^
Jeg bruger den her, der returnerer et array med dato, tekst og type.
tekst er navnet på helligdagen, type er er en enum hvor H svarer til
helligdag og N blot er en markering af dagen, som Mors dag f.eks.
(Se evt
http://sdccms.dk/kalender/index.php - helligdage er markeret
med røde datoer, andre med gult)
Funktionen DatoSplit finder år, måned og dag fra en dato (tekst) med
formatet Y-m-d H:i:s
function DatoSplit($adate, &$y, &$m, &$d) {
list($dt, $tm) = explode(' ', $adate);
list($y, $m, $d) = explode('-', $dt);
}
Funktionen GetHelligDag() henter faste datoer fra en database, der
indeholder helligdage (og navnedage) med faste datoer - udvælges efter
måned og dato.
Funktionen er måske lidt bagvendt, idet den undersøger om en given dato
er en helligdag eller "navnedag". Hvis det er indeholder det
returnerede array info om dagen - ellers returneres et array bestående
af tomme strenge.
function IsHelligdag($adate) {
$res = array('dato' => '', 'tekst' => '', 'typ' => '');
DatoSplit($adate, $aar, $m, $d);
if (($rez = GetHelligDag($adate)) && (mysqli_num_rows($rez) > 0) &&
($arr = mysqli_fetch_assoc($rez))) {
$res = $arr;
}
if ($res['dato'] == '') { // Fastelavn, Påske, Kr. Himmelfart, Pinse,
Advent
$paaske = easter_days($aar);
switch ($adate) {
case date('Y-m-d', mktime(0, 0, 0, 3, (21-49+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Fastelavn', 'typ' =>
'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21-7+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Palmesøndag', 'typ' =>
'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21-3+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Skærtorsdag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21-2+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Langfredag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Påskedag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+1+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => '2. Påskedag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+26+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Store bededag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+39+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Kristi Himmelfartsdag',
'typ' => 'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+49+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => 'Pinsedag', 'typ' =>
'H');
break;
case date('Y-m-d', mktime(0, 0, 0, 3, (21+50+$paaske), $aar)) :
$res = array('dato' => $adate, 'tekst' => '2. Pinsedag', 'typ' =>
'H');
break;
}
}
if ($res['dato'] == '') { // Mors dag - 2. søndag i maj
$may1 = date('w', mktime(0, 0, 0, 5, 1, $aar));
$mors_dag = ($may1 == 0) ? 8 : 15-$may1;
$mors = date('Y-m-d', mktime(0, 0, 0, 5, $mors_dag, $aar));
if ($mors == $adate) {
$res = array('dato' => $adate, 'tekst' => 'Mors Dag', 'typ' => 'N');
}
}
if ($res['dato'] == '') { // Advent
$sa = date('w', mktime(0, 0, 0, 12, 24, $aar));
switch ($adate) {
case date('Y-m-d', mktime(0, 0, 0, 12, 24-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '4. Søndag i advent',
'typ' => 'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 12, 17-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '3. Søndag i advent',
'typ' => 'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 12, 10-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '2. Søndag i advent',
'typ' => 'N');
break;
case date('Y-m-d', mktime(0, 0, 0, 12, 3-$sa, $aar)) :
$res = array('dato' => $adate, 'tekst' => '1. Søndag i advent',
'typ' => 'N');
break;
}
}
return $res;