PHP Kalender Problem mit Darstellung

Ach du lieber Gott...
Das hätte ich im Leben nie so umsetzen können.
Durch testen bin ich schon fast soweit gewesen:
PHP:
$year = 2013; 

// Jahreskalendarium als Array: 
///////////////////////////////
// Wochentage in gewünschter Reihenfolge
$wochentage = array ('1'=>"Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
// Monate
$monate = array("01" => 'Januar',"02" => 'Februar',"03" => 'März',"04" => 'April',"05" => 'Mai',"06" => 'Juni',"07" => 'Juli',"08" => 'August',"09" => 'September',"10" => 'Oktober',"11" => 'November',"12" => 'Dezember');
// Jul.Tag des ersten und des letzten Tages im Jahr: 
$firstJD = cal_to_jd(0,1,1,$year); 
$lastJD = cal_to_jd(0,12,31,$year); 

// Array erzeugen:
for($jd=$firstJD; $jd<=$lastJD; $jd++) 
{ 
  $kw[] = $arrDaysInYear[$jd]['KW'] = date('W',jdtounix($jd));
  $tag[] = $arrDaysInYear[$jd]['Tag'] = date('d',jdtounix($jd));
  $wtag[] = $arrDaysInYear[$jd]['W-Tag'] = $wochentage[$jd % 7 + 1];  /* DayOfWeek » Wochentag (1..7) */
  $anztage[] = $arrDaysInYear[$jd]['Anz.Tage'] = date('t',jdtounix($jd));
  $monat[] = $arrDaysInYear[$jd]['Monat'] = $monate[date('m',jdtounix($jd))];
}  

//$kw = array_unique($kw);
$monat = array_unique($monat);
//print_r(array_count_values($kw));

/*for($i = 0; $i < count($monat); $i++) { 
 $testmonat = mktime(0, 0, 0, $i+1, 1, $year); 
 $colspan = date("t", $testmonat);
 }*/

echo '<table border="1" cellspacing="1" cellpadding="0">';
echo '<TR>';

foreach($monat as $key => $mein_monat)
{
  echo "<td colspan=".$anztage[$key]." align=center><strong>".$mein_monat."</strong></td>";
}

echo "</tr><tr>";

foreach($kw as $meine_kw)
{
  echo "<td>KW ".$meine_kw."</td>";
}

echo "</tr><tr>";

foreach($tag as $key => $mein_tag)
{
  echo "<td>".$wtag[$key]."<br>".$mein_tag."</td>"; 
}

echo "</tr><tr>";

foreach($kw as $meine_kw)
{
  echo "<td>&nbsp;</td>";
}

echo '</TR>';
echo '</table>';
Mal schauen ob ich es auch so hinbekomme, oder ob ich auf deinen Code zurückgreife ;-)

Also ich versuche da gerade eine Urlaubsplanung zu schreiben, später werden noch Daten aus der DB geholt und im Kalender sichtbar gemacht.

Ich denke ich melde mich in einem Jahr hier wieder wenn ich soweit bin, wenn ich sehe wo ich mit meinen Skills stehe. :(

LG
Maik
 
Hallo,

habs mit meinem und deinem Code gemischt und funktioniert. Nun bin ich dran Samstage Sonntage und Feiertage farblich hervorzuheben. Bei Sa und So geht das ja mit einer normalen if-Abfrage.
PHP:
foreach($tag as $key => $mein_tag)
{
	// prüfen auf Wochenende und markieren
	if ($wtag[$key] == "Sa" || $wtag[$key] == "So")
	{
			$sasoft = "sasoft ";
		} else {
			$sasoft = "";
	}
	echo '<td class="'.$sasoft.'">'.$wtag[$key].'<br>'.$mein_tag.'</td>'; 
}
Ich hab mir nun aber ein zusätzliches Array erstellt das die Feiertage in der Form enthält:
PHP:
$feiertage[] = "0101"; // Neujahrstag
$feiertage[] = "0601"; // Heilige drei Könige
$feiertage[] = "0105"; // Tag der Arbeit
... u.s.w.
lasse mir außerdem bei der Erstellung des Jahresarrays Tag und Monat genauso ausgeben mit:
PHP:
$tagmonat[] = $arrDaysInYear[$jd]['TagMonat'] = date('dm',jdtounix($jd)); // Tag und Monat zusammen jeweils 2-stellig
aber ich hab nun keine Ahnung wie ich das ganze nun mit anzeigen lassen kann.

Hier mein gesamter bisheriger Code. Vielleicht geht's auch mit dem Code so gar nicht? Wenn ich so schon Probleme habe was soll das dann werden wenn noch Daten aus der DB kommen. :(

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Kalender Jahr</title>
<style type="text/css">
TD, TH, P {
     FONT-FAMILY: Arial, Verdana, Trebuchet MS, Helvetica;
     FONT-SIZE: 8pt;
     FONT-WEIGHT: none;
     COLOR: black;
     BACKGROUND-COLOR: #eee;
}

P {
    BACKGROUND-COLOR: white;
}
.basic {COLOR: white; BACKGROUND-COLOR: #606096;}
.top {BACKGROUND-COLOR: #E7E7F1; COLOR: black; }
.heute {BACKGROUND-COLOR: #FFC; COLOR: black; }
.sasoft {BACKGROUND-COLOR:#FCC; COLOR: red;}
.sonder {COLOR: #90F;}
.white {BACKGROUND-COLOR: #FFFFFF;}
.blank {BACKGROUND-COLOR: white;}

A:link, A:visited, A:active {
    COLOR: #000020;
    TEXT-DECORATION: underline;
}
A:hover {
    COLOR: #FF4400;
}
.normal td {
	color: #000;
}
</style> 
</head>
<body>
<?php
// Jahreskalendarium als Array: 
///////////////////////////////

// aktuelles Jahr ermitteln
$year = date("Y");
// Start des Jahres
$start = mktime(0, 0, 0, 1, 1, $year);
// Tage im Jahr ermitteln - Stichwort Schaltjahr
$tagejahr = 365 + date('L', $start);
// Wochentage in gewünschter Reihenfolge
$wochentage = array ('1'=>"Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
// Monate in Deutsch
$monate = array("01" => 'Januar',"02" => 'Februar',"03" => 'März',"04" => 'April',"05" => 'Mai',"06" => 'Juni',"07" => 'Juli',"08" => 'August',"09" => 'September',"10" => 'Oktober',"11" => 'November',"12" => 'Dezember');
// Jul.Tag des ersten und des letzten Tages im Jahr: 
$firstJD = cal_to_jd(0,1,1,$year); 
$lastJD = cal_to_jd(0,12,31,$year); 

// Kalenderarray erzeugen:
for($jd=$firstJD; $jd<=$lastJD; $jd++) 
{ 
  $kw[] = $arrDaysInYear[$jd]['KW'] = date('W',jdtounix($jd)); // Kalenderwoche
  $tag[] = $arrDaysInYear[$jd]['Tag'] = date('d',jdtounix($jd)); // Tag des Monats 2-stellig
  $wtag[] = $arrDaysInYear[$jd]['W-Tag'] = $wochentage[$jd % 7 + 1];  // Wochentag (1..7)
  $anztage[] = $arrDaysInYear[$jd]['Anz.Tage'] = date('t',jdtounix($jd)); // Anzahl der Tage des Monats 28 bis 31
  $monat[] = $arrDaysInYear[$jd]['Monat'] = $monate[date('m',jdtounix($jd))]; // Monat als Zahl 2-stellig
  $tagmonat[] = $arrDaysInYear[$jd]['TagMonat'] = date('dm',jdtounix($jd)); // Tag und Monat zusammen jeweils 2-stellig
  //$wochentag[] = $arrDaysInYear[$jd]['WochenTag'] = $jd % 7 + 1;
}  

// Feste Feiertage Sachsen-Anhalt
$feiertage[] = "0101"; // Neujahrstag
$feiertage[] = "0601"; // Heilige drei Könige
$feiertage[] = "0105"; // Tag der Arbeit
$feiertage[] = "0310"; // Tag der Deutschen Einheit
$feiertage[] = "3110"; // Reformationstag
$feiertage[] = "2512"; // Erster Weihnachtstag
$feiertage[] = "2612"; // Zweiter Weihnachtstag

// Monats- und Kalenderwochenarray zusammenfassen
$kw = array_unique($kw);
$monat = array_unique($monat);

echo '<table border="1" cellspacing="1" cellpadding="0">';
echo '<TR>';

foreach($monat as $key => $mein_monat)
{
  echo "<td colspan=".$anztage[$key]." align=center><strong>".$mein_monat." ".$year."</strong></td>";
}

echo "</tr><tr>";

$currVal = 0;                  /* akt. Wochenwert  initialisieren */ 
$dayCount = 0;                 /* Tageszähler initialisieren */ 
foreach($arrDaysInYear as $val) 
{ 
  if($val['KW'] == $currVal) 
    $dayCount++;               /* Tage in akt. Woche zählen */ 
  else 
  { 
    if($dayCount > 0) 
      echo '<td colspan="', $dayCount, '" align=center>KW ', $currVal, '</td>'; 
    $currVal = $val['KW'];   /* Wochenwert aktualisieren */ 
    $dayCount = 1;             /* Tageszähler rücksetzen */ 
  } 
} 
echo '<td colspan="', $dayCount, '" align=center>KW ', $currVal, '</td>';

echo "</tr>";
echo "<tr>";

foreach($tag as $key => $mein_tag)
{
	// prüfen auf Wochenende und Feiertage und markieren
	if ($wtag[$key] == "Sa" || $wtag[$key] == "So")
	{
			$sasoft = "sasoft ";
		} else {
			$sasoft = "";
	}
	echo '<td class="'.$sasoft.'">'.$wtag[$key].'<br>'.$mein_tag.'</td>'; 
}

echo "</tr>";

// Schleife um alles, um eventuell den Kalender mit Feiertagen oder Daten aus der DB zu füllen
for($i = 0; $i < 15; ++$i)
{

echo "<tr>";

foreach($tag as $key => $mein_tag)
{
	// prüfen auf Wochenende und Feiertage und markieren
	if ($wtag[$key] == "Sa" || $wtag[$key] == "So")
	{
			$sasoft = "sasoft ";
		} else {
			$sasoft = "";
	}
	echo '<td class="'.$sasoft.'">&nbsp;</td>';
}

}//ENDE FOR-Schleife um alles

echo '</TR>';
echo '</table>';

var_dump($arrDaysInYear);
echo '<br>';
var_dump($tagmonat);
echo '<br>';
var_dump($feiertage);
?>
</body>
</html>

LG Maik
 
Muss noch mal nachfragen.
ich bekomme nun die Zeiten und Mitarbeiter aus der DB im Kalender angezeigt, leider nicht so ganz richtig, denn
die Zeiten werden für alle Mitarbeiter eingetragen nicht nur für den betreffenden.
Mir fehlt so der Wink mit dem Zaun ;) .

Hier mal mein vollständiger Code und ein Screenshot was ich meine.
PHP:
entfernt
die Spalte Mitarbeiter wird im Moment noch separat ausgelesen.

LG Maik
 

Anhänge

  • kalender001.png
    kalender001.png
    33 KB · Aufrufe: 20
Zuletzt bearbeitet:
Zurück