Kalender , einfach

Ein einfacher Jahreskalender findet ihr hinter dem Link. Die Routine ist so gehalten, das diese immer mit einem "Monat" als Ausgabe-Parameter gefüttert wird. Für ein Jahr werden eben alle Monate hintereinander ausgewertet und eine andere Routine sorgt für die Ausgabe des Monats an éinem bestimmten Platz in der Tabelle.

Die Monatsroutine habe ich wie folgt programmiert:

# ---------------------KalenderKlein------------------------
# Übergabe : Monat und Jahr 
function KalenderKlein($Monat,$Jahr) 
 { $Monate = array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); 
   $Monatstage= array("31","28","31","30","31","30","31","31","30","31","30","31");
   $WoTage = array("Mo","Di","Mi","Do","Fr","Sa","So");
   if ((ceil($Jahr / 4)) == floor($Jahr / 4)) { $Monatstage[1] = $Monatstage[1] + 1 ; } 
   $Zeit = time();
   $aktJahr = strftime("%Y",$Zeit);
   $aktMonat = strftime("%m",$Zeit);
   $aktTag = strftime("%d",$Zeit);
   $aktWoche =  strftime("%W",$Zeit);        # Beginnt mit Montag
   $aktWoTag =  strftime("%w",$Zeit);        # Montag = 1 ..6 Sonntag = 0
   # int mktime ( int Stunde, int Minute, int Sekunde, int Monat, int Tag, int Jahr [, int is_dst]) \
   $BildTabellenKopf = "images/cal_ico.gif";
   # #DD0000 - D.rot, #FFEAEA - h.rot #330099 - D.blau, #A4C1FF - mittl.blau, #C1D6FF h.blau, #FFCC00 - orange, #CCCCCC- h.grau
   $FontFarbeWoEnde = "#DD0000"; 
   $FontFarbeDefault = "#000000";
   $TBGFarbeDefault = "#FFFFFF";
   $TBGFarbeAktMonat= "#FFCC00";
   $TBGFarbeAktWoche = "#CCCCCC";
   $TBGFarbeAktTag = "#FFCC00";
   $TBGFarbeWoEnde = "#FFEAEA";
   $TBGFarbeWoHead = "#C1D6FF";
   $TBGFarbeTagHead = "#C1D6FF";
   # Schaltjahr - Monat Februar hat einen Tag mehr
   $day = mktime (0,0,0,(int)$Monat,1,(int)$Jahr);
   $Startwoche  = strftime ("%W", $day);       	# Startnummer der Woche des Monats
   $Starttag =  strftime("%w",$day);			# Startet bei Wochentag: 1..6 Mo bis Sa, 0 ist Sonntag
   if ($Starttag == 0) { $Starttag = 7; }       # Sonntag soll aber "7" sein
   $MonVari = $Monat - 1;
   $day = mktime (0,0,0,(int)$Monat,$Monatstage[$MonVari],(int)$Jahr);  
   $Endewoche  = strftime ("%W", $day);       	    # Endenummer der Woche des Monats
   $AnzWoche = $Endewoche - $Startwoche + 1;        # Wieviel Wochen sind für den Monat relevant, +1 um die erste und letzte anzuzeigen
   $Monatxy = array();                          	# 1 DIM Array des Monats, wird aber 7 (Tage) x  $AnzWoche (Wochen) Einträge enthalten
   $maxTageKalender = $AnzWoche * 7;                # soviel Tage ist in dem Monatskalender anzuzeigen
      for ($xy=0 ;$xy < $maxTageKalender;$xy++)
     { $Monatxy[$xy] = "  " ; } 						# initialisieren

   $Tage = array(array());							# 1. Array Woche XY, mit den Tagen des 2. Arrays -> soll Datum im Monat enthalten
   $UeberschriftWo = array();
   
   # das eindimens Array ab dem ersten Tag des Monats mit Zahlen belegen. Dabei verschiebt sich die Anzeige um den Starttag im Monat
   $TagedesMonats = 1;     	# 1.. $Monatstage[$MonVari] -> Tage die der Monat hat
   $StartArr = $Starttag-1; 	# Beginn mit der Zählung der Tage im Array
   $EndeArr = $Monatstage[$MonVari] + ($Starttag-1); # Ende der Zählung 
   for ($i=$StartArr; $i < $EndeArr; $i++)
    { $Monatxy[$i] = $TagedesMonats;
	  $TagedesMonats++;
	}	
   # Überschrift - Kalenderwoche
   for ($tg = 0; $tg < $AnzWoche; $tg++)
	  { $Vari =  $Startwoche + $tg  ; 
	    $UeberschriftWo[$tg] = $Vari; } 

   # TageArrray mit dem eindimensinalen Array belegen
   $laufvari = 0;
   for ($tg = 0; $tg < $AnzWoche; $tg++)
     { for ($wt = 0; $wt < 7; $wt++)
	    {  $Tage[$wt][$tg] = $Monatxy[$laufvari] ;  
		   $laufvari++;
		} 
	 }
   
  # Ausgeabe
   if (($aktMonat == $Monat) && ($aktJahr == $Jahr)) 
    { $farbeTabelleRand = $TBGFarbeAktMonat; 
      $farbeTabelleUeber = $TBGFarbeAktMonat;
    }
   else 
    { $farbeTabelleRand = "#999999" ; 
	  $farbeTabelleUeber = "#dcdcdc" ; 
	 }
   echo "<center><TABLE cellspacing='1' cellpadding='1' border='1' bordercolor='" . $farbeTabelleRand . "'>";
   echo "<TBODY><TR><TD bgColor='#dcdcdc'>";       
   
   echo "<table cellspacing='1' cellpadding='0' border='0' bgcolor='" . $farbeTabelleUeber . "'>";
   $breiteHead = $AnzWoche + 1;            # Tabellenüberschrift 1 -> Monat, width= 6*15 Pixel (max Wochen) + 20 (Wotage) -> breite damit etwa immer gleich
   echo "<tr><th colspan='$breiteHead' width='110' bgcolor='" . $farbeTabelleUeber . "'><font color='darkred'> " . $Monate[$MonVari] . " " . $Jahr . " </th></tr>";
   echo "<tr><td><center><img src='". $BildTabellenKopf ."' width='13' height='11'><center></td>"; 
   for ($wt = 0; $wt < $AnzWoche; $wt++) 	# Tabllenüberschrift 2 -> Kalenderwoche
     { if ($UeberschriftWo[$wt] == 0) {$UeberschriftWo[$wt]= 52 ;}                 # Jahreswechsel, Rest vom letzten Jahr
	   if (strlen($UeberschriftWo[$wt]) < 2 ) { $UeberschriftString = "  " . $UeberschriftWo[$wt]; }  # 2 stellige Ausgabe
	   else { $UeberschriftString = $UeberschriftWo[$wt];}  
	   echo "<th bgcolor='" . $TBGFarbeWoHead . "'><center><font size='-1'>" . $UeberschriftString . "</font></center></th>"; 
	 }
   echo "</tr>";
   for ($wt = 0; $wt < 7; $wt++) #  Zeilen = Wochentag
     { if ($wt >= 5)    					#  andere Farbe am WoEnde
	    { $farbeTag =  $FontFarbeWoEnde ;  }
	   else { $farbeTag = $FontFarbeDefault; } 
	   echo "<tr><td bgcolor='" . $TBGFarbeTagHead . "'><font size='-1' color='". $farbeTag ."'>" . $WoTage[$wt] . "</td>";  # Wochentage ausgeben
	   for ($tg = 0; $tg < $AnzWoche; $tg++)									# Tage ausgeben
	    {  if (($aktMonat == $Monat) && ($aktWoche == $UeberschriftWo[$tg])) { $farbeHintergrund = $TBGFarbeAktWoche; }
		   else { $farbeHintergrund = $TBGFarbeDefault; }
		   if ( ($aktWoche <> $UeberschriftWo[$tg]) && ($wt >= 5) ) { $farbeHintergrund = $TBGFarbeWoEnde; }
		   if (($aktMonat == $Monat) && ($aktTag == $Tage[$wt][$tg]) ) { $farbeHintergrund = $TBGFarbeAktTag; }
		   echo "<td bgcolor='" . $farbeHintergrund . "'><center><font size='-1' color='". $farbeTag ."'>" . $Tage[$wt][$tg] . "</font></td>";   
		} 
	   echo "</tr>";	
	 }
   echo " </TABLE>";
   echo "</TD></TR></TBODY></TABLE></center><br>";
 }  

Damit habe ich erstmal den übergebenen Monat des übergebenen Jahres.

Was man dann machen kann ist das aktuelle Quartarl anzuzeigen oder 10-Jahres Kalender zu erzeugen...

Aber hier die Routine um das aktuelle Jahr als Kalender auszugeben:

# ---------------------JahresUebersicht------------------------
# Übergabe : das auszugebene Jahr 
function JahresUebersicht($Jahr)
 {  $Zeilen = 3 ;
    $Spalten = 12 / $Zeilen; # So wie die Tablelle später assehen soll....
	$lauf = 1; 

    echo "<table cellSpacing='0' cellPadding='0' border='0'>"; 
    echo " <tr> <td colspan='" . $Spalten. "'> <h3 align='center'><a name='index'>Jahreskalender</a></h3> </td></tr>";

    for ($zl = 0; $zl <$Zeilen; $zl++)
     {  echo " <tr> ";
	    for ($sp = 0; $sp <$Spalten; $sp++)
         { echo "<td> <center> ";
		   KalenderKlein($lauf,$Jahr); # <- hier wird die oben angegebene Routine (deren Ausgabe erscheint hier!) aufgerufen.
	       echo  "</td>";
	       $lauf++;
	      } 
	     echo "</tr>";
		 echo " <tr> <td colspan='" . $Spalten. "'> </td></tr>";
	 }     
     echo " </TABLE>";
	 
   }

Verwendungshinweis: Um das Script zu verwenden einfach diese Datei über den Browser speichern und dann mit einem Texteditor oder Dreamweaver / FirstPage etc. bearbeiten. Das Script darf für jeden frei verwendet werden, soweit der Autor / Quelle genannt wird. Wer nützliche Links / Scripte hat, darf die mir auch gerne zur Verfügung stellen..