frage zu dem php kalender tutorial

ja gute frage :)

der wert $start wird ja bei jedem durchlauf um EINTAG (sekunden einens tages) erhöht und damit wird mit der date funktion das datum erzeugt

nur im oktober gibt es einen tag wo das nicht hinhaut... da is guter rat teuer
 
Hallo Zusammen,
Hier ein Tip, wie es bei mir funktioniert hatt.

Setzt bei der ersten Zuweisung von "$start" den optionalen Parameter für Sommer/Winterzeit auf "0" (Standard ist "-1").
Also:
PHP:
$start = mktime ( 0, 0, 0, $monat, 1, $jahr,0 );

Gruß

Ralf
 
Hallo ihr,

hab das gleiche Problem.
allerdings im August.
ansonsten stimmen alle.

Habe das Sommer-/Winterzeit-Parameter hinzugefügt, das tuts aber leider nicht.

Hat da jemand vielleicht ne Lösung?
 
hallo,
ich hab mir das script auch angeschaut. gibt es eine möglichkeit, dass anstatt mit sonntag mit montag begonnen wird?

vielen dank
stephan
 
jo, ich hab das auch mit Montag beginnen lassen.

Ich habe sogar ganz vorne noch eine Spalte, in der die jeweilige Woche des Jahres ausgegeben wird:

PHP:
<html>
<head>
<title>Kalender</title>
</head>
<body>
<?php
if (!checkdate($heuteMonat, 1, $heuteJahr))
{
	$heute=getdate();
	$heuteMonat=$heute[mon];
	$heuteJahr=$heute[year];
}
//monatserster
$start=mktime(0, 0, 0, $heuteMonat, 1, $heuteJahr, 0);
$mon_arr=array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
$tage_arr=array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag");

echo "
<form name='kalender' method='post' action='$PHP_SELF'>
<table cellspacing='0px' cellpadding='5px' align='center' style='border: 2px solid $c_bd_all;'>
	<tr>
		<td colspan='8' style='border-bottom: 1px solid $c_bd_all; text-align: center;'><select name='heuteMonat' style='width: 100px;' onchange='this.form.submit();'>";
		for ($m=1; $m<=count($mon_arr); $m++)
		{
			echo "<option value='$m'"; echo ($m==$heuteMonat)?" selected":""; echo ">".$mon_arr[$m-1]."</option>";
		}
		echo "
		</select>
		<select name='heuteJahr' style='width: 100px;' onchange='this.form.submit();'>";		
		for ($j=1980; $j<=2020; $j++)
		{
			echo "<option value='$j'"; echo ($j==$heuteJahr)?" selected":""; echo ">$j</option>";
		}
		echo "
		</select>
		<input type='submit' name='show' value='anzeigen' style='width: 80px;'>
		</td>
	</tr>
	<tr>";
		echo "
		<td style='border: 1px solid $c_bd_all; border-right: 2px solid $c_bd_all; font-weight: bold; font-size: 10px;'>Woche</td>";
		foreach ($tage_arr as $w_tag) {
			echo "<td style='border: 1px solid $c_bd_all; font-weight: bold; font-size: 10px;'>$w_tag</td>";}
			
	for ($z=0; $z<(6*7); $z++)
	{
		$akt_dat=getdate($start);
		if (($z % 7) == 0)
		{
			if ($akt_dat[mon]!=$heuteMonat)
			{ break;}
			else {
			$woche=date("W", $start);
			echo "
			</tr>
			<tr>
				<td style='border-right: 2px solid $c_bd_all; text-align: center;'>"; echo ($woche<10)?"0".$woche:$woche; echo "</td>";}
		}
		if ($akt_dat[wday]==0) {$akt_dat[wday]=7;}
		if ($z < $akt_dat[wday]-1 || $akt_dat[mon]!=$heuteMonat)
		{
			echo "<td></td>";
		}
		else
		{
			if ($akt_dat[wday]==6) {$style="style='text-align: center; background-color: $c_row; color: red;'";}
			if ($akt_dat[wday]==7) {$style="style='text-align: center; background-color: $c_row; color: red; font-weight: bold;'";}
			if ($akt_dat[wday]!=6 && $akt_dat[wday]!=7) {$style="style='text-align: center; background-color: $c_row;'";}
			$today=getdate();
			if /*heutigen Tag hervorheben*/($today[mday]==$akt_dat[mday] && $today[mon]==$akt_dat[mon] && $today[year]==$akt_dat[year]) {$style="style='text-align: center; background-color: $c_bd_all; font-weight: bold; color: white;'";}
			
			echo "<td ".$style.">"; echo ($akt_dat[mday]<10)?"0".$akt_dat[mday]."":$akt_dat[mday]; echo "</td>";
			//einen Tag weiter (in sekunden: 60s*60min*24h=1d): 
			$start=$start+(60*60*24);
		}
	}	
	echo "
	</tr>
</table>
</form>
";
?>
</div>
</body>
</html>

Ich hoffe das konnte dir weiterhelfen.

Du solltest natürlich noch mal nach ein paar Variablen schauen, ich habe dort einige Styles mit Variablen definiert.

mfg

s,j.
 
stonedjehova hat gesagt.:
jo, ich hab das auch mit Montag beginnen lassen.

Ich habe sogar ganz vorne noch eine Spalte, in der die jeweilige Woche des Jahres ausgegeben wird:

PHP:
<html>
<head>
<title>Kalender</title>
</head>
<body>
<?php
if (!checkdate($heuteMonat, 1, $heuteJahr))
{
	$heute=getdate();
	$heuteMonat=$heute[mon];
	$heuteJahr=$heute[year];
}
//monatserster
$start=mktime(0, 0, 0, $heuteMonat, 1, $heuteJahr, 0);
$mon_arr=array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
$tage_arr=array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag");

echo "
<form name='kalender' method='post' action='$PHP_SELF'>
<table cellspacing='0px' cellpadding='5px' align='center' style='border: 2px solid $c_bd_all;'>
	<tr>
		<td colspan='8' style='border-bottom: 1px solid $c_bd_all; text-align: center;'><select name='heuteMonat' style='width: 100px;' onchange='this.form.submit();'>";
		for ($m=1; $m<=count($mon_arr); $m++)
		{
			echo "<option value='$m'"; echo ($m==$heuteMonat)?" selected":""; echo ">".$mon_arr[$m-1]."</option>";
		}
		echo "
		</select>
		<select name='heuteJahr' style='width: 100px;' onchange='this.form.submit();'>";		
		for ($j=1980; $j<=2020; $j++)
		{
			echo "<option value='$j'"; echo ($j==$heuteJahr)?" selected":""; echo ">$j</option>";
		}
		echo "
		</select>
		<input type='submit' name='show' value='anzeigen' style='width: 80px;'>
		</td>
	</tr>
	<tr>";
		echo "
		<td style='border: 1px solid $c_bd_all; border-right: 2px solid $c_bd_all; font-weight: bold; font-size: 10px;'>Woche</td>";
		foreach ($tage_arr as $w_tag) {
			echo "<td style='border: 1px solid $c_bd_all; font-weight: bold; font-size: 10px;'>$w_tag</td>";}
			
	for ($z=0; $z<(6*7); $z++)
	{
		$akt_dat=getdate($start);
		if (($z % 7) == 0)
		{
			if ($akt_dat[mon]!=$heuteMonat)
			{ break;}
			else {
			$woche=date("W", $start);
			echo "
			</tr>
			<tr>
				<td style='border-right: 2px solid $c_bd_all; text-align: center;'>"; echo ($woche<10)?"0".$woche:$woche; echo "</td>";}
		}
		if ($akt_dat[wday]==0) {$akt_dat[wday]=7;}
		if ($z < $akt_dat[wday]-1 || $akt_dat[mon]!=$heuteMonat)
		{
			echo "<td></td>";
		}
		else
		{
			if ($akt_dat[wday]==6) {$style="style='text-align: center; background-color: $c_row; color: red;'";}
			if ($akt_dat[wday]==7) {$style="style='text-align: center; background-color: $c_row; color: red; font-weight: bold;'";}
			if ($akt_dat[wday]!=6 && $akt_dat[wday]!=7) {$style="style='text-align: center; background-color: $c_row;'";}
			$today=getdate();
			if /*heutigen Tag hervorheben*/($today[mday]==$akt_dat[mday] && $today[mon]==$akt_dat[mon] && $today[year]==$akt_dat[year]) {$style="style='text-align: center; background-color: $c_bd_all; font-weight: bold; color: white;'";}
			
			echo "<td ".$style.">"; echo ($akt_dat[mday]<10)?"0".$akt_dat[mday]."":$akt_dat[mday]; echo "</td>";
			//einen Tag weiter (in sekunden: 60s*60min*24h=1d): 
			$start=$start+(60*60*24);
		}
	}	
	echo "
	</tr>
</table>
</form>
";
?>
</div>
</body>
</html>

Ich hoffe das konnte dir weiterhelfen.

Du solltest natürlich noch mal nach ein paar Variablen schauen, ich habe dort einige Styles mit Variablen definiert.

mfg

s,j.





hi, ich hab das problem mit dem datumsfehler im october und mai auch gehabt allerdings hast du den mit deinem script offensichtlich gefixt. nun wollt ich wissen wie du das gemacht hast? Also wo liegt dieser fehler im algorithnus?

GREEZ

rubosh
 
Hi,

Ich mache grad ein Praktikum in einer Web-Agentur. Im Moment sollen "wir" einen Urlaubskalender programmieren. Ich bräuchte im Moment aber nur einen normalen Kalender, das erweitern mach ich dann..

Leider bin ich in php noch blutiger anfänger. Also hab ich das tutorial hier genommen und den part mit der monats-bestimmung weggelassen und für monat und jahr am anfang des codes einfach zwei variablen geschrieben.

Der Kalender wird allerdings noch in einer anderen Datei included. Nun wird ja nur ein Monat angezeigt, muss ich jetzt den ganzen code für alle Monate nochmal wiederholen oder kann ich nicht von der index.php, die die kalender.php included aus, die variablen monat und jahr festlegen und dann includen lassen? Hoffe mich versteht jemand ^^. Ich will bloß umgehen, dass ich den ganzen code noch 11 mal wiederholen muss.

ThX
Flugzeugfreund
 
Also ich hab mir das Tutorial mal durchgelsen nun fix , und so wie es aussieht geht das allles über 2 Select Felder die dann über $_POST die Werte übergeben.

Somit wird ebenfalls nur immer ein Monat in einen gewissen Jahr angezeigt werden können. Bei diesem Tutorial "nur" bis zum Jahre 2010.

Wobei ich da auch gleich einen Fehler gefunden habe , und das war wohl damals auch die Frage wegen dem Oktober.

PHP:
        print "\t<td>$tagArr[mday] $tagArr[month]</td>\n"; 
        $start += EINTAG;

EINTAG ist eine Konstante mit 60 * 60 * 24 , also genau 1 Tag der auch genau 24 Stunden hat. Dabei passiert es aber , bzw ist mir schon passiert , das man im Oktober und zwar zwischen den 25 und 31 auf Winterzeit umstellt. Was zur Folge hat das der Tag auf einmal 25 Stunden hat und nicht mehr 24 und er sich somit aufhängt.
Kann man umgehen indem man überprüft ob der nächste Tag bereits Winterzeit hat oder nicht , falls dies der Fall sein sollte rechnet man eben mit *25 statt *24.Oder aber man macht es alles mittels date("d",mktime(0,0,0,monat,tag,jahr), da muss man nur den Tag erhöhen und muss sich um diese Sommer / Winterzeit keine Sorgen mehr machen.

Zu Deiner eigentlichen Frage , du kannst das ganze Ding quasi in eine Funktion packen , mit 2 Parametern die übergeben werden sollen , und zwar den Monat und den Tag. Als Rückgabe Wert lieferst Dir dann einfach ein komplettes Kalender Grid zurück.

Aber ich kann Dir dann auch gleich eine Kalender Klasse ans Herz legen. Blos wird das Erweiteren für Dich als "blutiger PHP Anfänger" Sofern Du einer bist etwas kniffliger nehm ich an.

Aber dennoch mal ein Link dazu :

http://www.tutorials.de/forum/php-codeschnipsel/227051-kalender-klasse.html

MfG
 
Hmm,
also der code in der index.php sieht so aus:

PHP:
<?

require('config.php');

include('./templates/head.php');
?>

<table width="33%">
	<tr align="center">
		<td width="33%"><? include('./templates/Kalender.php'); ?></td>
		</tr>
</table>

Wie schon gesagt, habe ich in meinem kalendercode die beiden select-felder wegegelassen und gleich mit den variablen $monat und $jahr bestimmt.
Kann ich nun nich einfach von der index.php jeweils nen code mit den beiden bestimmten variablen zu der kalender.php senden und danach mit ausgefüllten variablen wieder abfragen? Und das ganze dann 12 mal mit immer anderen variablen?

ThX für deine Hilfe
Flugzeugfreund

PS: Bei dem Praktikum hab ich eigentlich arbeiten im designtechnischen design vorgestellt und nich progrannieren.. ^^ Nich das ich hier komische sachen unterstellt krieg... ;)
 
Zuletzt bearbeitet:
Zurück