Hallo,

Ik heb een probleem om de datum in een option te zetten. Zoals je hieronder misschien ziet, gaat het om de maand.


	<select name="maand" id="select-maand">
<option value="0" selected="selected">Huidige maand</option>
<option value="1"><?php date("F")+1 ?></option>
<option value="2"><?php date("F")+2 ?></option>
<option value="3"><?php date("F")+3 ?></option>
</select>


Echter werkt dit niet zoals ik wil. De 1e optie moet dus de huidige maand worden, bijvoorbeeld september. De 2e optie moet dan oktober worden, november, december ect.

Mocht het nu oktober zijn, moet oktober de 1e optie zijn, en november optie zijn, december 3, januari 4, ect.

Iemand een idee hoe ik dit kan oplossen? En een eventueel voorbeeldje erbij?

Alvast bedankt!

Met vriendelijke groeten,
Bart Roelofs
Date("F") geeft een tekst en dan doe jij +1.
Hoe wil je een getal en een tekst optellen?

date('F')

A full textual representation of a month, such as January or March

January through December
Had eigenlijk gehoopt dat het zou werken... Een andere suggestie om in een formulier de huidige datum als eerste in een drop down te zetten gevolgd door 11 opvolgende maanden?

Groeten
Bart
PHP heeft geen Nederlandse kalendermaanden dus is een array het handigst. Dan moet je nog even een for lusje hebben om de maanden weer te geven:

<?php
$months = array(
"januari",
"februari",
"maart",
"april",
"mei",
"juni",
"juli",
"augustus",
"september",
"oktober",
"november",
"december"
);

$today = getdate();

echo "<select name='maand' id='select-maand'>";
for($i = 1 ; $i <= 12 ; $i++) {
$selected = "";
if($i == $today['mon'])
$selected = " selected='selected'";
echo "<option value='$i'$selected>".$months[$i-1]."</option>";
}
echo "</select>";
?>

Het kan zijn dat dit nog niet helemaal is zoals je wil maar dit lijkt mij handig als het om de maanden van één en dezelfde kalenderjaar gaat om het zo te doen

Frank: wat is strftime() dan? In combinatie met set_locale()?

Jouw array is echt wel makkelijker/sneller in dit geval hoor. Daar niet van, maar PHP kent het dus wel.
En waarom niet even met een makkelijkere foreach() alles afwerken?
Ja, er zijn inderdaad nogal wat "vormen" van tijd/datum classes en functies. Ik weet uit eigen ervaring dat dit best lastig kan zijn.

Inderdaad Eddy, Php kent nederlands dus :). Ik wist dat niet. en een foreach kan natuurlijk ook in dit voorbeeld. Veel wegen leiden naar Rome

i.i.g is $today hier een "assoc" array. Probeer maar eens <?php var_dump($today); ?>
(in de bron is het beter leesbaar).

Daarnaast kun je met mktime(); de datum en tijd verschuiven.
zo krijg je met de volgende snippet de eerste en laatste dag van de lopende maand:

<?php
$today = getdate();
$firstDay = getdate(mktime(0,0,0,$today['mon'],1,$today['year']));
$lastDay = getdate(mktime(0,0,0,$today['mon']+1,0,$today['year']));
echo "de eerste dag van deze maand is: ".$firstDay['mday']."-".$firstDay['mon']."-".$firstDay['year']."<br/>";
echo "de laatste dag van deze maand is: ".$lastDay['mday']."-".$lastDay['mon']."-".$lastDay['year']."<br/>";
?>

groeten Frank
Oké, het werkt. Heb het op de volgende manier opgelost, voor als iemand het probleem ooit nog tegenkomt:


<form action="drop_down_select_month3.php" method="post">
<p><label for="maand">Kies een maand</label><br>


<select name="maand" id="maand" onchange="this.form.submit();">
<?php

if(!isset($_POST['smaand'])){
	$smaand = date('m');
	}
	else{
		$smaand = $_POST['smaand'];
	};
$maanden = array(1 => 'Jan.', 2 => 'Feb.', 3 => 'Mar.', 4 => 'Apr.', 5 => 'Mei', 6 => 'Jun.', 7 => 'Jul.', 8 => 'Aug.', 9 => 'Sep.', 10 => 'Okt.', 11 => 'Nov.', 12 => 'Dec.'); // afkortingen van maanden

foreach ($maanden as $key => $value): 
    $selected_m = ($key == $smaand) ? ' selected="selected"' : ''; 
    echo '<option value="' . $key . '"' . $selected_m . ' name="smaand">' . $value . '</option>' . PHP_EOL; 
endforeach; 
?>
</select>
<noscript>
<p>
<input name="kiezen" type="submit" value="Verzenden">
</p>
</noscript>
</form>


Met vriendelijke groeten,
Bart Roelofs
Een <option> heeft geen name, dus name="smaand" kan weg.
Owhja, natuurlijk! Bedankt voor de aanvulling!

Reageren