Tag, Monat und Jahr als Dropdown, mögl. Tage mittels JavaScript prüfen und korrigiere

Promaetheus

Mitglied
Ich habe mir ein kleines Script erstellt welches mir Tag, Monat und Jahr als Dropdown ausgibt. Mittels Javascript wird geprüft und auch gleich ausgebessert wieviele Tage der ausgewählte Monat hat, bzw. haben darf. Mittels PHP wird das aktuelle Jahr und zusätzlich 5 weitere als Dropdown angeboten.

Ich weiss, es gibt bereits fertige Kalender, jedoch wollte ich selbst so eine Lösung erstellen. Soweit so gut. Bis jetzt hat das gut funktioniert, da ich das als Veranstaltungsdatum verwendet habe. Nun soll das Ganze aber um ein weiteres Datum, nämlich Enddatum ergänzt werden. Das Problem ist, dass ich für diese 2. Datumsfelder eigene ID´s benötige.

Eine Lösung wäre jetzt, das Javascript einfach zu kopieren und umzuändern, was ich persönlich jedoch sehr unschön fände. Gibt es hierzu vielleicht eine andere Lösung? Ich wäre Euch für Tipps diesbezüglich sehr dankbar.

Anbei mein erstelltest Script als Testseite (test.php hier als HTML formatiert, da nur ein geringer Teil davon PHP ist):
HTML:
<html>
<head>
<script language="JavaScript">
<!--
function getDays() {
	var day = document.getElementById("day").value;
  var month = document.getElementById("month").value;
  var year = document.getElementById("year").value;
  var februaryDays = 28;
  if((year%4 == 0 && year%100 !=0) || year%400 == 0) {
    var februaryDays = 29;
  }
  var days = new Array(31, februaryDays, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  document.getElementById("day").options.length = days[month-1];
  for(i = 0; i < days[month-1]; i++) {
  	document.getElementById("day").options[i].innerHTML = i+1;
    document.getElementById("day").options[i].value = i+1;
  }
}
//-->
</script>
</head>

<body>
<select name="day" id="day" onchange="getDays();">
<?php
for($i=1; $i<32; $i++) {
  echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select>

<select name="month" id="month" onchange="getDays();">
<?php
$months = array(1 => "Januar",
                2 => "Februar",
                3 => "März",
                4 => "April",
                5 => "Mai",
                6 => "Juni",
                7 => "Juli",
                8 => "August",
                9 => "September",
                10 => "Oktober",
                11 => "November",
                12 => "Dezember");
foreach($months as $key => $value) {
	echo '<option value="'.$key.'">'.$value.'</option>';
}
?>
</select>

<select name="year" id="year" onchange="getDays();">
<?php
for($i=0; $i<5; $i++) {
  $value = date('Y') + $i;
  echo '<option value="'.$value.'">'.$value.'</option>'; 
}
?>
</select>
</body>
</html>
 
Erweitere deine Funktion getDays um einen Parameter ID.
Die HTML Felder wirst du ohnehin kopieren müssen. Damit du die Funktion jetzt nicht auch noch kopierst (weil das Bockmist wäre), regelst du den Aufruf dann über den dynamischen Parameter.
 
Das ist eine gute Idee. Aber wie kann ich das mit einer Variable regeln, es wird doch die ID verwendet, das kann ich doch nicht ändern? Bin wohl schon etwas müde heute.
 
HTML:
<html>
<head>
<script language="JavaScript">
<!--
function getDays(id) {
	var day = document.getElementById("day"+id).value;
  var month = document.getElementById("month"+id).value;
  var year = document.getElementById("year"+id).value;
  var februaryDays = 28;
  if((year%4 == 0 && year%100 !=0) || year%400 == 0) {
    februaryDays = 29;
  }
  var days = new Array(31, februaryDays, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  document.getElementById("day").options.length = days[month-1];
  for(i = 0; i < days[month-1]; i++) {
  	document.getElementById("day").options[i].innerHTML = i+1;
    document.getElementById("day").options[i].value = i+1;
  }
}
//-->
</script>
</head>

<body>
<select name="day" id="day1" onchange="getDays(1);">
<?php
for($i=1; $i<32; $i++) {
  echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select>

<select name="month" id="month1" onchange="getDays(1);">
<?php
$months = array(1 => "Januar",
                2 => "Februar",
                3 => "März",
                4 => "April",
                5 => "Mai",
                6 => "Juni",
                7 => "Juli",
                8 => "August",
                9 => "September",
                10 => "Oktober",
                11 => "November",
                12 => "Dezember");
foreach($months as $key => $value) {
	echo '<option value="'.$key.'">'.$value.'</option>';
}
?>
</select>

<select name="year" id="year1" onchange="getDays(1);">
<?php
for($i=0; $i<5; $i++) {
  $value = date('Y') + $i;
  echo '<option value="'.$value.'">'.$value.'</option>'; 
}
?>
</select>
</body>
</html>

Du musst nur noch ein zweites Formular ergänzen. Z.B. mit id 2. Und natürlich ggf. die Namen der Formularfelder anpassen.
 
Danke TS! Eine solche Komplettlösung hätte ich natürlich nicht erwartet, tausend Dank dafür! Ich werde es morgen gleich testen. Vergelts!
 
Zurück