Ik heb een vreemde fout met betrekking tot de functie cal_days_in_month().

Ik gebruik deze functie om het aantal dagen te bepalen in een maand, maar bij de maanden augustus en september geeft hij de fout:

Warning: cal_days_in_month() [function.cal-days-in-month]: invalid date. in /home/admin/domains/adsupply.nl/public_html/affiliate/stats.php on line 200


als ik $maand echo geeft hij in die maanden een 0 weer, bij de andere maanden allemaal gewoon goed.

<?php
if ($_GET['maand'] == 7)
{
	$maand 			= 07;
	$maandletters 	= 'Juli';
}
if ($_GET['maand'] == 8)
{
	$maand 			= 08;
	$maandletters 	= 'Augustus';
}
if ($_GET['maand'] == 9)
{
	$maand 			= 09;
	$maandletters 	= 'September';
}
if ($_GET['maand'] == 10)
{
	$maand 			= 10;
	$maandletters 	= 'Oktober';
}

$aantaldagen = cal_days_in_month(CAL_GREGORIAN, $maand, $jaar);
?>


Ik snap het niet aangezien de variabele $maand gewoon op dezelfde manier gevuld wordt als de anderen en ook in de url zelf staat er wel een 8 en 9.

oh ja, de variabele jaar wordt eerder in het script reeds gevuld en heeft in die maanden ook gewoon een waarde.
Dat kan eenvoudiger, php heeft daar een kant-en-klare functie voor:
<?php
$date = mktime(0, 0, 0, 2, 1, 2008); // 2 = februari, duhhhhh
echo date('t', $date); // 29
?>
Dan blijf ik met hetzelfde probleem zitten, en dat is de variabele $maand niet de juiste waarde heeft.

Ik heb het even geprobeerd en heb nu
<?php
$date			= mktime(0,0,0,$maand,1,$jaar);
				$aantaldagen 	= date("t",$date);
?>


Nu worden er wel regels weergegeven waarin de data moet komen en de foutmelding is weg, maar voor zowel augustus als september geeft hij nu 31 dagen en dat komt dus omdat $maand de waarde 0 heeft.
Wat is volgens jou het verschil tussen 09 en 9 ?

Daarnaast snap ik niet waarom je het zo moeilijk doet, met een array is dit vele malen eenvoudiger:
<?php
$aMaanden = array(
1 => 'januari',
2 => 'februari',
3 => 'maart',
4 => 'april'
); // etc

$_GET['maand'] = 2; // even om te testen...

if (isset($_GET['maand']) && array_key_exists($_GET['maand'], $aMaanden)) {
$date = mktime(0,0,0, $_GET['maand'], 1, 2008);
echo date('t', $date); // 29
}
?>
het verschil tussen 09 en 9 is in mijn geval de weergave, toegegeven, kan ik oplossen bij het echoën e.d.
maar bij de andere maanden werkt het ook met een 0, die haalt php er vanzelf tussenuit of negeert die, dus snap niet waarom het dan niet werkt.

Reageren