Scripts

Kalender

Dus je zoekt iets om eenvoudig een datumpje mee in te vullen? Je wilt iets maken zoals een outlook agenda of je wilt ergens anders een agenda voor hebben? Dan heb ik nu wat leuks voor je gemaakt! Enkele weken geleden werd ik door een klasgenoot gevraagd om ergens mee te helpen. Omdat datums in PHP soms best ingewikkeld zijn kom ik hem op dat moment niet 1-2-3 helpen. Nu ik vakantie heb besloot ik enkele dagen geleden er toch maar een uurtje in te investeren... het is toch eigenlijk best interessant om te zoeken naar zulke oplossingen ;). Je kan het practisch overal wel voor gebruiken en het is ook gemakkelijk te intergreren. Bijvoorbeeld in je css, een popup of een formulier. Met een beetje creativiteit kan je er dit soort applicaties mee maken. Een werkend voorbeeld vind je hier (test:test).

kalender
<?php
//Allereerst gaan we alle maanden defineren
$maanden 	= array(1 => 'Januari', 2 => 'Februari', 3 => 'Maart', 4 => 'April', 5 => 'Mei', 6 => 'Juni', 7 => 'Juli', 8 => 'Augustus', 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'December');

//De dagen in een week
$weekdagen	= array('maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag','zondag');

//En de jaren die we willen toestaan, in dit geval van 2006 tot 2010.
$jaren 		= range(2006,2010); 

//Wat als er een maand in de url staat?
if(isset($_GET['maand']))
{
	//Eerst kijken we of die maand wel bestaat
	if(array_key_exists($_GET['maand'], $maanden)) 
	{
		$maand = $_GET['maand'];
	}else{
		$maand = date('n');
	}	
}else{
	$maand = date('n');
}

//Wat als er een jaar in de url staat?
if(isset($_GET['jaar']))
{
	//Eerst kijken we of we dat jaar wel goedkeuren
	if(in_array($_GET['jaar'],$jaren))
	{
		$jaar = htmlentities($_GET['jaar']);
	}else{
		$jaar = date('Y');
	}	
}else{
	$jaar = date('Y');
}

//Omdat we nu het jaar en de maand weten kunnen we vaststellen welke dagen zijn toegestaan
$dagen = range(1,date('t', mktime(0,0,0,$maand,1,$jaar)));

//Wat als er een dag in de url staat?
if(isset($_GET['dag']))
{
	//Bestaat deze dag wel? 
	if(in_array($_GET['dag'], $dagen)) 
	{
		$dag = htmlentities($_GET['dag']);
	}else{
		$dag = 1;
	}	
}else{
	//Wat als er geen dag is geselecteerd? Dan kijken we of het vandaag dezelfde maand is als wat er is opgevraagd en selecteren we vandaag!
	if($maand == date('n'))
	{
		$dag = date('j');
	}else{
		$dag = 1;
	}
}

//Tijd voor een formuliertje! 
echo '<form action="" method="GET">';

//We maken een selectbox met daarin een foreach met alle maanden
echo '<select name="maand" onchange="this.form.submit()">';
foreach($maanden as $maandnummer => $maandnaam)
{
	if($maandnummer == $maand)
	{
		echo '<option selected value="'.$maandnummer.'">'.$maandnaam.'</option>';
	}else{
		echo '<option value="'.$maandnummer.'">'.$maandnaam.'</option>';
	}
}
echo '</select> ';

//Vervolgens maken we een selectbox voor alle jaren
echo '<select name="jaar" onchange="this.form.submit()">';
foreach($jaren as $jaarnummer)
{
	if($jaarnummer == $jaar)
	{
		echo '<option selected value="'.$jaarnummer.'">'.$jaarnummer.'</option>';
	}else{
		echo '<option value="'.$jaarnummer.'">'.$jaarnummer.'</option>';
	}
}
echo '</select></form><hr>';

//Nu word het tijd om een mooi tabelletje te maken
echo '<table>';

//We echoƩn alvast de bovenste rij
echo '<tr><th>M</th><th>D</th><th>W</th><th>D</th><th>V</th><th>Z</th><th>Z</th></tr><tr>';

//Wat is de eerste dag van de maand?
$eerstedag = date('w', mktime(0,0,0,$maand,1,$jaar));

//Deze hebben we nodig om wat lege ruimte te vullen als de week niet begint op maandag.
for($nummer = 1; $nummer <= 6; $nummer += 1)
{
	if($nummer != $eerstedag)
	{
		echo '<td></td>';
	}else{
		$nummer = 7;
	}
}
	
//Voor iedere dag in de week gaan we nu een loopje beginnen!
foreach($dagen as $dag2)
{
	//Welke weegdag is het?
	$dagindeweek = date('w', mktime(0,0,0,$maand,$dag2,$jaar));
			
	//Als het 1 is (maandag) begint er een nieuwe rij!
	if($dagindeweek == 1)
	{
		echo '<tr>';
	} 
	
	//Stel dat het toevallig dezelfde datum als vandaag is? Dan willen we een rood randje!
	if(($dag2 == date('j')) && ($maand == date('n')) && ($jaar == date('Y')))
	{
		echo '<td style="border: 1px solid red;">'; 
	}else{
		echo '<td>'; 
	}	

	//Stel dat het toevallig dezelfde dag is als de dag die we geselecteerd hebbeb? Dan willen we bold!
	if($dag2 == $dag)
	{
		echo '<a href="?dag='.$dag2.'&amp;maand='.$maand.'&amp;jaar='.$jaar.'"><b>'.$dag2.'</b></a></td>';
	}else{
		echo '<a href="?dag='.$dag2.'&amp;maand='.$maand.'&amp;jaar='.$jaar.'">'.$dag2.'</a></td>';
	}
	
	//Als het dag 0 is (zondag) willen we de rij eindigen!
	if($dagindeweek == 0)
	{
		echo '</tr>';
	}	
}

//Sluiten die handel! Huppakee!
echo '</table>';

//Uiteraard willen we een vorige maand...
if($maand == 1)
{
	echo '<br><a href="?maand=12&amp;jaar='.($jaar-1).'"><< Vorige</a>';
}else{
	echo '<br><a href="?maand='.($maand-1).'&amp;jaar='.$jaar.'"><< Vorige</a>';
}

//... en volgende maand knopje! Als het Januari of December is doen er uiteraard 1 jaar eraf of erbij.
if($maand == 12)
{
	echo ' | <a href="?maand=1&amp;jaar='.($jaar+1).'">Volgende >></a>';
}else{
	echo ' | <a href="?maand='.($maand+1).'&amp;jaar='.$jaar.'">Volgende >></a>';
}

//Zo, wel zo aardig vind je niet ;)
echo '<br><br><a href="http://www.arjaninkenia.nl" target="_blank">Arjan Kapteijn</a>'; 
?>

Reacties

0
Nog geen reacties.