login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Kalenders > kalender

kalender

Auteur: Thomas - 27 augustus 2004 - 13:52 - Gekeurd door: Dennisvb - Hits: 26400 - Aantal punten: 2.76 (17 stemmen)



De code spreekt redelijk voor zich. Wil je alleen de functie gebruiken moet je de functie in een include zetten. De stijlopmaak kun je er ook wel zelf uitslopen.
LET EROP dat date() en mktime() maar in een bepaald jaar-interval geldig zijn (1970-2030 ofzo).

30-04-04: Fix in stylesheet
COLOR= veranderd naar COLOR: en aanhalingstekens rondom kleurcodes verwijderd

04-07-04: Fix in weergave van weeknummers

15-10-04: Tweede fix in weergave weeknummers, hopelijk nu voorgoed.

20-09-05: Fix in weeknummers Weeknummers worden nu (weer) berekend

Code:
style.css
  1. .td {font-weight: bold;
  2. background-color: #00cccc;}
  3.  
  4. .tm {font-weight: bold;
  5. background-color: #00cccc;}
  6.  
  7. .hd {font-weight: bold;}
  8.  
  9. .am {color: #cccccc;}
  10.  
  11. .bd {background-color: #cccccc;
  12. font-weight: bold;}
  13.  
  14. td {font-family: Arial;
  15. font-size: 9pt;}


kalender.php
  1. <html>
  2. <head>
  3. <title>Kalender</title>
  4. <link href="style.css" type="text/css" rel="stylesheet">
  5. </head>
  6.  
  7. <body>
  8. <?php
  9. function drukmaandaf($fm, $fy) {
  10. // zelfgedefinieerde dag- en maandnamen
  11. $dagnaam = array(0 => "ma", "di", "wo", "do", "vr", "za", "zo");
  12. $maandnaam = array(1 => "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December");
  13.  
  14. $nu = time();
  15. $by = (date("Y", $nu) == $fy);
  16. $bm = (date("n", $nu) == $fm);
  17.  
  18. // zoek de eerste maandag van de week waarin de maand $fm begint
  19. $eerstedag = mktime(0, 0, 0, $fm, 1, $fy);
  20. if(date("w", $eerstedag) <> 1) {
  21. // eerste dag van de maand is geen maandag
  22. $eerstemaandag = mktime(0,0,0,$fm,1-(!date("w", $eerstedag) ? 6 : date("w", $eerstedag) - 1),$fy);
  23. } else {
  24. // eerste dag van de maand valt op een maandag
  25. $eerstemaandag = $eerstedag;
  26. }
  27.  
  28. // zoek de laatste zondag van de week waarin de maand $fm eindigt
  29. $laatstedag = mktime(0, 0, 0, $fm, date("t", mktime(0, 0, 0, $fm, 1, $fy)),$fy);
  30. if(date("w", $laatstedag)) {
  31. // laatste dag van de maand is geen zondag
  32. $laatstezondag = mktime(0, 0, 0, $fm+1, 7 - date("w",$laatstedag), $fy);
  33. } else {
  34. // laatste dag van de maand valt op een zondag
  35. $laatstezondag = $laatstedag;
  36. }
  37.  
  38. // we gaan kijken in hoeveel kalenderweken een maand zit. Hierbij moeten we op twee speciale gevallen
  39. // letten: de eerste maandag van januari en de laatste zondag van december, deze kunnen namelijk in
  40. // een ander jaar zitten en hierdoor de berekening van het het aantal weken verknoeien.
  41. $edz = 0; // extra dagen die aan de zondag toegevoegd moeten worden
  42. if($fm == 1 && date("Y", $eerstemaandag) <> $fy) {
  43. // de maand waar we naar kijken is januari, en de eerste dag van de week waarin januari begint
  44. // valt niet op een maandag (en niet in het huidige jaar)
  45. // - we dienen dus dagen toe te voegen aan de laatste zondag...
  46. $edz = date("z", mktime(0,0,0,12,31,$fy-1))+1;
  47. }
  48. if($fm == 12 && date("Y", $laatstezondag) <> $fy) {
  49. // de maand waar we naar kijken is december, en de laatste dag van de week waarin december eindigt
  50. // valt niet op een zondag (en niet in het huidige jaar)
  51. // - we dienen dus dagen toe te voegen aan de laatste zondag...
  52. $edz = date("z", mktime(0,0,0,12,31,$fy))+1;
  53. }
  54. // we kunnen nu het aantal weken berekenen - het verschil tussen de
  55. // eerste maandag en de laatste zondag +1 is altijd deelbaar door 7.
  56. $aantalweken = (date("z", $laatstezondag) + $edz - date("z", $eerstemaandag) + 1)/7;
  57.  
  58. // we kunnen nu mbv $eerstemaandag en $aantalweken de kalender van een maand af gaan drukken
  59. echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n";
  60. echo "<tr><td class=\"".($by && $bm ? "tm" : "hd")."\" colspan=\"".($aantalweken+1)."\" align=\"center\">";
  61. echo $maandnaam[$fm]." ".$fy;
  62. echo "</td></tr>\n";
  63. // weeknummers afdrukken
  64. echo "<tr><td>&nbsp;</td>";
  65. for($i=0; $i < $aantalweken; $i++) {
  66. $week = date("W", $eerstemaandag + $i * 604800 + 3600); // seconden in een week + een uur
  67. echo "<td class=\"bd\">".(($week < 10) ? "0".$week : $week)."</td>";
  68. }
  69. echo "</tr>";
  70.  
  71. // dagnamen en dagnummers afdrukken
  72. for($d = 0; $d < 7; $d++) {
  73. echo "<tr>\n";
  74. echo "<td class=\"bd\">".$dagnaam[$d]."</td>\n";
  75. for($w = 0; $w < $aantalweken; $w++) {
  76. // in verband met zomer en wintertijd moet bij de dag een uur opgeteld worden
  77. // anders krijg je 2x dezelfde dag achter elkaar
  78. $dag = $eerstemaandag+($w*7+$d)*86400 + 3600;
  79. $dagnummer = date("j", $dag);
  80. $bd = (date("j", $nu) == $dagnummer);
  81. echo "<td".(date("n", $dag) <> $fm ? " class=\"am\"": ($by && $bm && $bd ? " class=\"td\"" : "")).">";
  82. echo ($dagnummer < 10 ? "0" : "").$dagnummer;
  83. echo "</td>";
  84. }
  85. echo "</tr>\n";
  86. }
  87. echo "</table>\n";
  88. } // einde functie drukmaandaf
  89.  
  90. // extra - kijkt in de url of er al eens een kalendermaand is opgevraagd
  91. if(!isset($_GET['m']) || !isset($_GET['y'])) {
  92. $m = date("n");
  93. $y = date("Y");
  94. } else {
  95. $m = $_GET['m'];
  96. $y = $_GET['y'];
  97. }
  98.  
  99. // drukt de kalender af
  100. drukmaandaf($m, $y);
  101.  
  102. // linkjes naar vorige en volgende maand
  103. echo "<a href=\"".$_SERVER['PHP_SELF']."?m=".($m > 1 ? $m-1 : 12)."&y=".($m > 1 ? $y : $y-1)."\">previous</a> | ";
  104. echo "<a href=\"".$_SERVER['PHP_SELF']."?m=".($m < 12 ? $m+1: 1)."&y=".($m < 12 ? $y : $y+1)."\">next</a>";
  105. ?>
  106. </body>
  107. </html>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (4)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.052s