kalender-met-weeknummers

Gesponsorde koppelingen

PHP script bestanden

  1. kalender-met-weeknummers

« Lees de omschrijving en reacties

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>&nbsp;</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>";
?>

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.