Toevoegen link bij datum

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Justin S

Justin S

31/01/2009 12:38:00
Quote Anchor link
Hallo allemaal, ik zit met een vraagje, ik heb het volgende script een beetje uit elkaar proberen te halen om te zorgen dat de data in de kalender klikbaar worden en de datum instellen van de maandag van die week voor een roostersysteem. Nu gebeurt het elke keer dat als ik een verandering aanbreng, het hele ding het niet meer doet :-s.
De weeknummers mogen niet klikbaar worden, want soms starten de weken in het te maken rooster niet op een maandag IVM feestdagen worden er vaak aparte roosters gemaakt.
Dus alleen de data moeten klikbaar zijn.

Daarna de vraag, kan ik met variabelen uit dit script de dag, maand en het jaar gescheiden doorsturen naar het rooster? die variabelen kan ik namelijk nergens ontdekken?

Alvast bedankt!


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
<html>
<head>
<title>Kalender</title>

<style type="text/css">
.td {font-weight: bold;     background-color: #00cccc;} .tm {font-weight: bold;     background-color: #00cccc;} .hd {font-weight: bold;} .am {color: #cccccc;} .bd {background-color: #cccccc;     font-weight: bold;} td {font-family: Arial;    font-size: 9pt;}
</style>

</head>

<body>
<?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\">\n";
  echo "<tr><td class=\"".($by && $bm ? "tm" : "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)."\">previous</a> | ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?m=".($m < 12 ? $m+1: 1)."&y=".($m < 12 ? $y : $y+1)."\">next</a>";
?>

</body>
</html>
 
PHP hulp

PHP hulp

21/11/2024 20:43:11
 
Emmanuel Delay

Emmanuel Delay

01/02/2009 06:19:00
Quote Anchor link
Okay, ik zal niet echt antwoorden op je vraag, maar, misschien interesseert het je te leren werken met de datetime klasse.

http://ditio.net/2008/06/03/php-datetime-and-datetimezone-tutorial/

Spijtig genoeg is het wat moeilijk om daar deftige informatie over te vinden, maar indien je er wat mee vertrouwd raakt, ben je verlost van die Unix seconden en van die mktime() <=> date() functies.

Misschien zouden dan de meeste van je problemen zich niet meer stellen.

Ik zie bv. zo'n lijn code: $week = date("W", $eerstemaandag + $i * 604800 + 3600);
Heb je rekening gehouden met zomeruur/winteruur; laat staan schrikkelseconden? Ik denk het niet.
 



Overzicht Reageren

 
 

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.