Anzahl Tage eines bestimmten Monats (js)

Hallo,
ich habe zwei - Elemente, beim einen kann ein Monat ausgewählt werden (name:1-12, value:Januar-Dezember), beim anderen den Tag.
Per php konnte ich vom aktuell ausgewählten Monat (beim Öffnen der Seite) die Anzahl Tage bestimmen, da ich aber von javascript noch nicht so viel Ahnung habe, hier meine Frage:
Wie kann ich beim Auswählen eines anderen Monats sofort dessen Anzahl Tage berechnen und den mit den Tagen aktualisieren?

Also bei elf von zwölf Monaten ist die Anzahl der Tage immer
gleich, da gibt es nichts zu berechnen, das kann man einfach so
vorhalten.
Beim Februar hängt die Anzahl der Tage davon ab, in welchem
Jahr man sich befindet und ob das ein Schaltjahr ist oder nicht.
Wie man berechnet, ob ein bestimmtes Jahr ein Schaltjahr ist,
kannst du etwa bei Wikipedia nachgucken:

Ist die Jahreszahl nicht durch 4 teilbar, handelt es sich um
kein Schaltjahr, ebenso, wenn die Jahreszahl durch 100 teilbar
ist, aber nicht durch 400. Die anderen Jahre sind dann
Schaltjahre, wo der Februar 29 Tage hat, sonst 28 Tage.
Man beachte allerdings, daß sich die Regeln irgendwann vor
ein paar hundert Jahren geändert haben, so daß man für die
fernere Vergangenheit andere Regeln anwenden muß.
Zudem gibt es ein Problem mit Schaltsekunden, da gibt es dann
auch Tage und damit auch Monate, die eine andere Zahl von
Sekunden haben. Das kann man zumindest für die Zukunft nicht
lange vorhersagen, da das gemäß aktueller Messungen festgelegt
wird.

Ich meine mit den Datumsfunktionen von PHP kann man auch
abfragen, ob es sich bei einem Jahr um ein Schaltjahr handelt,
da wird man auch abfragen können, wieviel Tage der Monat
hat. Ob es das auch bei js gibt, ist mir nicht bekannt.

Geht das nicht ein wenig einfacher? Bei php hab ich einfach ne Schleife + checkdate() (Test, ob Datum möglich ist) verwendet. Sowas sollte es doch auch bei js geben?

Also PHP führt genau diese Berechnungen durch, da ist das auch
nicht einfacher. Die Datumsfunktionen von PHP ignorieren
allerdings Schaltsekunden komplett.

Welche js Funktionen es gibt, die ein Datum auf Korrektheit
prüfen, solltest du vielleicht einfach mal recherchieren.
Mit einschlägigen Stichwörtern bin ich da bei einer
Suchmaschine jedenfalls sofort fündig geworden - obgleich ich
keine Ahnung von js habe ;o)

Die Prüfung mit PHP ist ja sowieso zuverlässiger, da das js ja
auch deaktiviert sein kann.

Ich hab mal genau das selbe Problem gehabt und mir ne JS-Lösung zusammengebastelt. Hier mal der Code den ich verwendete:

function tage(monat){
		var monate = new Array();
		var heute = new Date();
		for(i=heute.getFullYear();i<=heute.getFullYear()+1;i++){
			if(i%4 == 0 && (i%100 != 0 || i%400 == 0)){ //Schaltjahr wenn jahr durch 4, nicht aber durch 100 ausser durch 400
				monate[i] = {1:31,2:29,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31};
			} else{ //kein Schaltjahr
				monate[i] = {1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31};
			}
		}
		aktu_monat = new Date(heute.getFullYear(),monat,monate[heute.getFullYear()][monat]) //gew&auml;hlter Monat in diesem Jahr
		if(monat < (heute.getMonth()+1)){
			jahr = heute.getFullYear() + 1;
		} else{
			jahr = heute.getFullYear();
		}
		
		selektiert = $('tag').options[$('tag').selectedIndex].value;
		
		$('tag').innerHTML = '';
		for(i=1;i<=monate[jahr][monat];i++){
			i>9 ? str_i = String(i) : str_i = '0' + String(i);
			if(selektiert == i){
				option = createDOM('option',{'value':str_i, 'selected':'selected'},str_i);
			} else{
				option = createDOM('option',{'value':str_i},str_i);
			}
			$('tag').appendChild(option);
		}	
	}

Oben wird bestimmt wie die Tage im Jahr verteilt sind und dann unten wird noch geschaut was denn in diesem Jahr so ist. Bei mir war die Auswahl so, dass man von Januar bis Dezember wählen kann jeodch das Jahr nicht. Deshalb wird geschaut ob der Monat bereits vorbei in diesem Jahr und dann für das nächste gezählt. (Ist der Mittelteil)
Unten wird dann die Optionbox kreeiert, wobei die Funktion createDOM selbstgebaut ist und nur W3C-konform HTML kreeiert per JavaScript. Kann man aber auch einfach mit innerHTML machen…

mfG
dola

Einfach ein neues Date-Objekt erzeugen - Monat auf den Folgemonat setzen (Achtung, JavaScript zählt die Monate von 0 beginnend!), Tag auf 0 setzen - das ergibt dann den letzten Tag des Vormonats. Und dann noch mittels getDate eben dessen Nummer zurückgeben lassen.

Beispiel für aktuell Mai 2009:

Also das Beispiel von chris ist genau das, was ich gesucht hab.
Jetzt müsste ich nur noch wissen, wie ich den generieren kann, ich hab wie gesagt keine Ahnung von js, hab bisher nur kleine Funktionen mit onclick="" benutzt.

Das Selectfeld wird ja sowieso gebraucht, nur mit unterschiedlicher Anzahl an Options - also kann das schon von vornherein vorhanden sein. (Sollte vielleicht auch schon per Default Options von 1 - 31 enthalten - falls JS nicht verfügbar ist, Validierung muss ja sowieso serverseitig erfolgen, wenn die Daten übergeben wurden.)

Und zum Löschen/Erstellen von Options per JavaScript - siehe SELFHTML, de.selfhtml.org/javascript/objekte/options.htm

Ich werd mich dann mal schlau machen, wie Variabeln in js überhaupt aussehen und über den ganzen Rest, ist halt wirklich ne Bildungslücke^^ Danke für eure Hilfe