PHP Kalender, 31. Monatstag wird nicht angezeigt

B

+ BELA B. +

Gast
Hallo liebe Gemeinde,

Ich habe wieder einmal einen Hund in meinem PHP Code.
Und zwar, ich habe eine Terminübersicht für das gesamte Jahr gebastelt.
Es funktioniert auch soweit, nur der 31. Monatstag wird nicht angezeigt.
Sprich, am 31. 8. zum Beispiel gibt es einen Termin, welcher aber nicht angezeigt wird.

Hier der Code:




PHP:
<?php
path("Termine &raquo; alternative Ansicht");
$months = array(
"01" => "J&auml;nner",
"02" => "Februar",
"03" => "M&auml;rz",
"04" => "April",
"05" => "Mai",
"06" => "Juni",
"07" => "Juli",
"08" => "August",
"09" => "September",
"10" => "Oktober",
"11" => "November",
"12" => "Dezember"
);
$days = array(
0 => "Sonntag",
1 => "Montag",
2 => "Dienstag",
3 => "Mittwoch",
4 => "Donnerstag",
5 => "Freitag",
6 => "Samstag");

echo "<span class=\"linkMed\"><a href=\"index.php?s=terms\">Zur&uuml;ck</a></span>";



$currentMonth = date("m");
if($_GET['showAll']) $showAll = true;
else $showAll = false;
if(!$showAll) echo "<div align=\"right\" class=\"linkMed\"><a href=\"index.php?s=termsAlternative&showAll=1\">Jahres&uuml;berblick</a></div>";
else echo "<div align=\"right\" class=\"linkMed\"><a href=\"index.php?s=termsAlternative&showAll=0\">Ab ".$months[date("m")]." anzeigen</a></div>";

echo "<div style=\"padding: 15\">";
foreach($months as $num => $month) {
if($num >= $currentMonth || $showAll) {
echo "<span class=\"textBig\"><b>$month</b></span><br>";
$monthBegin = mktime(0,0,0,$num,1,date("Y"));
$monthEnd = mktime(0,0,0,$num,date("t",$monthBegin));

#echo date("d.m.Y",$monthBegin)."-".date("d.m.Y",$monthEnd)." ($num)";

	$terms = $db->query("SELECT * FROM `terms` WHERE `date`>'".$monthBegin."' AND `date`<'".$monthEnd."' ORDER BY date ASC");

	#var_dump($terms);
	
	
	
	
	
	if($terms) {
	
	echo "<div style=\"margin-left: 30\">";
		foreach($terms as $term) {
		$todayBegin = mktime(0,0,0);
		$todayEnd = mktime(23,59,0);
		if($term['date']<$todayEnd && $term['date']>$todayBegin) $markIt = true;
		else $markIt = false;
		
		if($markIt) echo "<div style=\"background-color: lightgreen\">";
		echo $days[date("w",$term['date'])].",<br><b>".date("d.m.",$term['date'])."</b>";
		echo " - ";
		echo "<span class=\"linkMed\"><b>".$term['name']."</b></span>";
		echo "<br>";
		echo "<span class=\"textSmall\">".$term['desc']."</span>";
		
		echo "<br><br>";
		if($markIt) echo "</div>";
		}
	/*$currentMonth_forGeb = date("Y")."-".$num."-01";
	$gebs = $db->query("SELECT * FROM `spieler` WHERE FROM_UNIXTIME(gebDate,'%m') = DATE_FORMAT('$currentMonth_forGeb','%m') ORDER BY name ASC");
	if($gebs) {
		foreach($gebs as $geb) {
		echo "<img width=20 src=\"/img/geburtstag.gif\">".date("d.m.",$geb['gebDate'])."</b> - ";
		echo $geb['name']."'s Geburtstag";
		echo "<br>";
		}
	}
	*/
	
		
		
	echo "</div>";
	
	} else {
	echo "<span class=\"textSmall\"><i>In diesem Monat stehen keine Termine an.</i></span>";
	}





echo "<hr>";
}
}

echo "</div>";







?>
 
$monthEnd und $monthBegin sind auch falsch gesetzt in Verbindung mit deinem Operanden im Query. Nutz dafür doch dann bitte auch den Richtigen:
Code:
WHERE `date` BETWEEN '".$monthBegin."' AND '".$monthEnd."'
Du schließt faktisch nur alles zwischen dem ersten des Monats null Uhr und dem letzten des Monats aus.

Außerdem wäre es besser, wenn du einfach Monat + 1 und Tag - 1 bzw. <Anzahl Tage des Monats> + 1 rechnest anstatt den letzten Tag herauszusuchen, denn was ist mit dem 31.8.2013 23:59:59? Der wäre in deiner Abfrage ebenso nicht enthalten. Du brichst ja praktisch am 31.8.2013 00:00:00 ab mit deinem Query.
 
Zuletzt bearbeitet:
Du schließt faktisch nur alles zwischen dem ersten des Monats null Uhr und dem letzten des Monats aus.
Stimmt, genau das war der Fehler!

Eine Frage noch,

Wie man im Script oben erkennen kann, wollte ich die Geburtstage die im jeweiligen Monat sind auch anzeigen lassen. Der Code ist derzeit deaktiviert, weil es nicht so geklappt hat, wie ich wollte. Ich habe da auch sicher einen Fehler oder mehrere. Kenne mich da zuwenig aus mit diesen Zeit-Abfragen bei MySQL.

Weißt du, oder jemand, wie ich das anstellen kann?
 
Mach es doch genauso. Such alle Geburtstage zwischen A und B heraus bzw. an welchem Tag x du gerade bist.
 
es geht ja darum, das wenn jetzt Monat 3 ist, das er alle Geburtstage vom Monat März sucht in der Tabelle Spieler (gebDate). GebDate entspricht einem unix timestamp.....
aber wie muss der query richtig aussehen?
 
Geh doch mal durch was du machst. Programmieren besteht nicht aus vorsagen und nachmachen. ;) Sieh dir genau an was der Code macht, geh ggf. alles auf einem Blatt Papier für jeden einzelnen Schritt durch oder sieh es dir im Debugger an und guck nach Fehlern.

Tipp: Die Zeilen 57 und 58 sind falsch. Sieh dir die Werte davon an und vergleich sie mit Vorhandenen. Auch hilft dir ein Blick in die Doku zu mktime und dessen Standardwerten.
 
Zurück
Oben