kalender-met-weeknummers
Gesponsorde koppelingen
PHP script bestanden
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?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>";
?>
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>";
?>