Scripts
Kalender met weeknummers
Goedendag Heb hier nog een script voor mensen die een kalender willen hebben zonder gebruik van Mysql. het is heel erg eenvoudig. en zit een vorige en volgende maand bij. Er zitten ook weeknummers in verwerkt de datum wordt geselecteerd. Je kunt je eigen stylesheet toevoegen aan het systeem. Hopelijk hebben jullie er wat aan.
kalender-met-weeknummers
<?php
function drukmaandaf($fm, $fy) {
// zelfgedefinieerde dag- en maandnamen
$dagnaam = array(0 => "ma", "di", "wo", "do", "vr", "za", "zo");
$maandnaam = array(1 => "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");
$nu = time();
$by = (date("Y", $nu) == $fy);
$bm = (date("n", $nu) == $fm);
// zoek de eerste maandag van de week waarin de maand $fm begint
$eerstedag = mktime(0, 0, 0, $fm, 1, $fy);
if(date("w", $eerstedag) <> 1) {
// eerste dag van de maand is geen maandag
$eerstemaandag = mktime(0,0,0,$fm,1-(!date("w", $eerstedag) ? 6 : date("w", $eerstedag) - 1),$fy);
} else {
// eerste dag van de maand valt op een maandag
$eerstemaandag = $eerstedag;
}
// zoek de laatste zondag van de week waarin de maand $fm eindigt
$laatstedag = mktime(0, 0, 0, $fm, date("t", mktime(0, 0, 0, $fm, 1, $fy)),$fy);
if(date("w", $laatstedag)) {
// laatste dag van de maand is geen zondag
$laatstezondag = mktime(0, 0, 0, $fm+1, 7 - date("w",$laatstedag), $fy);
} else {
// laatste dag van de maand valt op een zondag
$laatstezondag = $laatstedag;
}
// we gaan kijken in hoeveel kalenderweken een maand zit. Hierbij moeten we op twee speciale gevallen
// letten: de eerste maandag van januari en de laatste zondag van december, deze kunnen namelijk in
// een ander jaar zitten en hierdoor de berekening van het het aantal weken verknoeien.
$edz = 0; // extra dagen die aan de zondag toegevoegd moeten worden
if($fm == 1 && date("Y", $eerstemaandag) <> $fy) {
// de maand waar we naar kijken is januari, en de eerste dag van de week waarin januari begint
// valt niet op een maandag (en niet in het huidige jaar)
// - we dienen dus dagen toe te voegen aan de laatste zondag...
$edz = date("z", mktime(0,0,0,12,31,$fy-1))+1;
}
if($fm == 12 && date("Y", $laatstezondag) <> $fy) {
// de maand waar we naar kijken is december, en de laatste dag van de week waarin december eindigt
// valt niet op een zondag (en niet in het huidige jaar)
// - we dienen dus dagen toe te voegen aan de laatste zondag...
$edz = date("z", mktime(0,0,0,12,31,$fy))+1;
}
// we kunnen nu het aantal weken berekenen - het verschil tussen de
// eerste maandag en de laatste zondag +1 is altijd deelbaar door 7.
$aantalweken = (date("z", $laatstezondag) + $edz - date("z", $eerstemaandag) + 1)/7;
// we kunnen nu mbv $eerstemaandag en $aantalweken de kalender van een maand af gaan drukken
echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"100%\">\n";
echo "<tr><td class=\"".($by && $bm ? "tm1" : "hd")."\" colspan=\"".($aantalweken+1)."\" align=\"center\">";
echo $maandnaam[$fm]." ".$fy;
echo "</td></tr>\n";
// weeknummers afdrukken
echo "<tr><td> </td>";
for($i=0; $i < $aantalweken; $i++) {
$week = date("W", $eerstemaandag + $i * 604800 + 3600); // seconden in een week + een uur
echo "<td class=\"bd\">".(($week < 10) ? "0".$week : $week)."</td>";
}
echo "</tr>";
// dagnamen en dagnummers afdrukken
for($d = 0; $d < 7; $d++) {
echo "<tr>\n";
echo "<td class=\"bd\">".$dagnaam[$d]."</td>\n";
for($w = 0; $w < $aantalweken; $w++) {
// in verband met zomer en wintertijd moet bij de dag een uur opgeteld worden
// anders krijg je 2x dezelfde dag achter elkaar
$dag = $eerstemaandag+($w*7+$d)*86400 + 3600;
$dagnummer = date("j", $dag);
$bd = (date("j", $nu) == $dagnummer);
echo "<td".(date("n", $dag) <> $fm ? " class=\"am\"": ($by && $bm && $bd ? " class=\"td\"" : "")).">";
echo ($dagnummer < 10 ? "0" : "").$dagnummer;
echo "</td>";
}
echo "</tr>\n";
}
echo "</table>\n";
} // einde functie drukmaandaf
// extra - kijkt in de url of er al eens een kalendermaand is opgevraagd
if(!isset($_GET['m']) || !isset($_GET['y'])) {
$m = date("n");
$y = date("Y");
} else {
$m = $_GET['m'];
$y = $_GET['y'];
}
// drukt de kalender af
drukmaandaf($m, $y);
// linkjes naar vorige en volgende maand
echo "<a href=\"".$_SERVER['PHP_SELF']."?m=".($m > 1 ? $m-1 : 12)."&y=".($m > 1 ? $y : $y-1)."\">Vorige</a> | ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?m=".($m < 12 ? $m+1: 1)."&y=".($m < 12 ? $y : $y+1)."\">Volgende</a>";
?>
Reacties
0