# PHP Kalender Wochenansicht *HILFE* :(



## Chilled86 (31. Mai 2007)

Hi Leute, ich bin gerade dabei einen Kalender zu programmieren, die Monatsansicht funktioniert soweit auch tadellso, er highlightet mir sogar den aktuellen Tag. Jetzt brauche ich aber noch eine Wochenansicht. Dabei sollen alle Tage von Mo-So nebeneinander ausgegeben werden mit Datum und darunter soll eine Zeiteinteilung erfolgen, wegen mir in 15 Minutenschritten. Ich bekomme es aber einfach nicht hin un bin drauf und dran mich von meinem Schreibtichstuhl zu werfen  kann mir bitte jemand weiterhelfen. Wäre euch sehr dankbar.

Greetz Chilled


----------



## ronaldo84 (31. Mai 2007)

Kannst du vielleicht etwas Code posten?


----------



## Chilled86 (31. Mai 2007)

Sorry hab ich verpeilt


```
<style type="text/css">
<!--
  tr.s {font-family:helvetica;font-size:9pt;}
  td.h {font-family:helvetica;font-size:10pt;text-align:right;}
  td.d {font-family:helvetica;font-size:9pt;background-color:white;}
  td.d0 {font-family:helvetica;font-size:9pt;border-style:solid;text-align:center;
    border-width:1px;border-color:gray;background-color:white;font-weight:normal;}
  td.d1 {font-family:helvetica;font-size:9pt;border-style:solid;text-align:center;
    border-width:1px;border-color:gray;background-color:#cccccc;font-weight:normal;}
  td.d2 {font-family:helvetica;font-size:9pt;border-style:dashed;text-align:center;
    border-width:1px;border-color:red;background-color:white;font-weight:bold;}
-->
</style>


<?php
  $zeit=time();
  
  if(isset($_GET[year])){$jahr = $_GET[year];}
    else{$jahr=date("Y", $zeit);}// ermitteln des Jahres
  if(isset($_GET[month])){$mon = $_GET[month];}
    else{$mon=date("n", $zeit);} // ermitteln des Monats
  if(isset($_GET[akt])){$akt = $_GET[akt];}
    else if(isset($_GET[year]) OR isset($_GET[month])){$akt = "";}
    else{$akt=date("d", $zeit);} // ermitteln des aktuellen Tages
  
  $last=date("t", mktime(0,0,0,$mon,1,$jahr)); // ermitteln des letzten Tages des Monats
  $prevmon = $mon - 1;
  $nextmon = $mon + 1;
  // Arrays für Monate und Wochentage
  $mo = Array("", "Januar", "Februar", "März","April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
  $wd = Array("So", "Mo", "Di", "Mi","Do", "Fr", "Sa", "So");

  // ermitteln des Wochentages für den ersten Tages des Monats
  $first_wd=date("w", mktime(0,0,0,$mon,1,$jahr));
  if ($first_wd==0) $first_wd=7; // Korrektur für den Sonntag
  
  echo "<div class=\"main\">";

  // Monatsasicht
  if($_GET[view] == "month" OR !$_GET[view]){
    echo "<table border=\"0\" cellpadding=\"12\" cellspacing=\"5\" align=\"center\">\n";
    // Monat ausgeben
    echo "<tr><td class=\"h\" colspan=\"7\"><b><a href=\"?main=".$_GET[main]."&section=".$_GET[section]."&view=".$_GET[view]."&month=".$prevmon."\"><<</a> " . $mo[$mon] ." ". $jahr ." <a href=\"?main=".$_GET[main]."&section=".$_GET[section]."&view=".$_GET[view]."&month=".$nextmon."\">>></a></b></td>";
    echo "<tr class=s><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr>\n";
    echo "<tr>";

    // Leere Zellen ausgeben, bis zum ersten Tag des Monats
    for ($j=1; $j<$first_wd; $j++) { echo "<td class=\"d\"> "; }
  
    for ($i=1; $i<=$last; $i++){
      $x=$wd[date("w", mktime(0,0,0,$mon,$i,$jahr))]; // ermitteln des Wochentages
      $bo="d0"; // definition des Standard-Style
      if ($x=="So") { $bo="d1"; } // Einfärbung des Sonntages
      if ($i==$akt) { $bo="d2"; } // Einfärbung des aktuellen Tages
      echo "\t<td class=\"$bo\"><a href=\"?main=".$_GET[main]."&section=".$_GET[section]."&subsection=dayoverview&day=".$i."\">$i</a></td>\n";
      if ($x=="So") echo "</tr>\n<tr>"; // Am Sonntag endet die jeweilige Zeile  
    }
  }
  //Wochenansicht
  else if($_GET[view] == "week"){
    echo "<table border=\"0\" cellpadding=\"12\" cellspacing=\"5\" align=\"center\">\n";
    // Monat ausgeben
    echo "<tr><td class=\"h\" colspan=\"7\"><b><a href=\"?main=".$_GET[main]."&section=".$_GET[section]."&view=".$_GET[view]."&month=".$prevmon."\"><<</a> " . $mo[$mon] ." ". $jahr ." <a href=\"?main=".$_GET[main]."&section=".$_GET[section]."&view=".$_GET[view]."&month=".$nextmon."\">>></a></b></td>";
    echo "<tr class=s><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr>\n";
    echo "<tr>";
    $week=date("W", mktime(0,0,0,$mon,$akt,$jahr));
    $wd=date("w", mktime(0,0,0,$mon,$akt,$jahr));
    if($wd > 1)
      $first_wd = mktime(0,0,0,$mon,$akt-$wd,$jahr);
    else
      $first_wd = mktime(0,0,0,$mon,$akt,$jahr);
    $last_wd = mktime(0,0,0,$mon,$first_wd,$jahr);  
    for($i=0; $i<7; $i++)
      echo $first_wd+1 . "\n";
    
     
    for ($i=1; $i<=7; $i++){
      $x=$wd[date("w", mktime(0,0,0,$mon,$i,$jahr))]; // ermitteln des Wochentages
      $bo="d0"; // definition des Standard-Style
      if ($x=="So") { $bo="d1"; } // Einfärbung des Sonntages
      if ($i==$akt) { $bo="d2"; } // Einfärbung des aktuellen Tages
      echo "\t<td class=\"$bo\">$i</td>\n";
      if ($x=="So") echo "</tr>\n<tr>"; // Am Sonntag endet die jeweilige Zeile  
    }  
  }
  echo "</tr></table>\n";
  echo "</div>";
?>
```

Der Teil ab 
//Wochenansicht
  else if($_GET[view] == "week"){

ist reine Spielerei, da hab ich nur rumprobiert un es ist dabei nicht rüber gekommen

mit date("W")... kann ich ja die Woche des Jahres ermitteln. Aber wie kann ich dann hingehen und herausfinden was der erste und letzte Tag dieser Woche ist? das würde mir schon sehr weiterhelfen


----------



## Michael Engel (31. Mai 2007)

Erster und letzter Tag der aktuellen woche... keine Ahnung ob das die schönste Lösung ist aber es ist immerhin eine ,)


```
$weekday = date("w", mktime(0,0,0,$mon,$akt,$jahr));
    if($weekday == 0) $weekday = 7;
    

    $first_wd = date("d.m.Y",mktime(0,0,0,$mon,$akt+1-$weekday,$jahr));
    $last_wd  = date("d.m.Y",mktime(0,0,0,$mon,$akt+7-$weekday,$jahr));
```

Nur testweise eben mit d.m.Y das man auch sieht auf welchem Datum er landet, ab da kann man dann ja weiter nach den einzelnen Tagen fragen.


----------



## Chilled86 (31. Mai 2007)

Das ist doch schonmal en Ansatz aber wie mach ich das dann, wenn ich zur nächsten Woche blättern will und sich in der aktuellen woche auch noch der Monat oder gar das Jahr verändert?


----------



## Michael Engel (31. Mai 2007)

Also die wochensprünge sind wieder sehr einfach, indem man mit mktime() sich neue Parameter für die website generieren lässt. Bei den Jahreswechseln einfach $jahr dementsprechend ändern mit +1 -1

generell ist mktime() wirklich eine superintelligente funktion wenn du im Tagesparameter 32 angibst, der monat aber nur 31 hat, landerst du im 1. des nächsten monats. Genau so gibt 0 den letzten tag des vormonats zurück.


```
$weekday = date("w", mktime(0,0,0,$mon,$akt,$jahr));
    if($weekday == 0) $weekday = 7;
    

    $first_wd = date("d.m.Y",mktime(0,0,0,$mon,$akt+1-$weekday,$jahr));
    $last_wd  = date("d.m.Y",mktime(0,0,0,$mon,$akt+7-$weekday,$jahr));  
    
    // vorherige woche (link draus machen)
      echo "seite.php?view=week&".date("\a\k\\t=d&\m\o\\n=m&\j\a\h\\r=Y",mktime(0,0,0,$mon,$akt-7,$jahr))."<br>";
    for($i=0; $i<7; $i++)
      echo date("d.m.Y",mktime(0,0,0,$mon,$akt+$i+1-$weekday,$jahr))."<br>";
    // nächste woche (link draus machen)
    echo "seite.php?view=week&".date("\a\k\\t=d&\m\o\\n=m&\j\a\h\\r=Y",mktime(0,0,0,$mon,$akt+7,$jahr));
```


----------

