killtec
Goto Top

Fehler im Javascript (Datumsvergleich)

Hallo zusammen,
ich habe ein Javascript, wlehes ein Datum zerlegen und vergleichen soll. Nur irgendwie wirft mir das Script Mist raus.
Das Datum soll im Format Jahr-Monat-Tag (YYYY-MM-DD) eingegeben werden.
Die Überprüfung des Jahres klappt, jedoch nicht des tages und des Monats.
Hier ist mein code.
Der window.alert(datum_eingabe + ... ist nur zum debigging vorhanden.
function formcheck(){
	var datum_eingabe = document.terminadd.datum.value;
	var dat_in = datum_eingabe.split("-");  
	var eing_jahr = dat_in
	var eing_monat = dat_in[1]
	var eing_tag = dat_in[2]
	var objdatum_existiert = new Date(eing_jahr, eing_monat, eing_tag);
	var vergleich = new Date();
	
	
	// Erweitern um eine 0 wenn die Zahl < 10 ist
	
	if (objdatum_existiert.getMonth() < 10){
		var monat_neu = "0" + objdatum_existiert.getMonth();  
		}
	if (objdatum_existiert.getDay() < 10){
		var tag_neu = "0" + objdatum_existiert.getDay();  
		}
		
	// Zusammenbau des späteren Vergleichsstrings
	vergleich = objdatum_existiert.getFullYear() + "-" + monat_neu + "-" + tag_neu;  
	window.alert(datum_eingabe + " = " + vergleich);  
		
	// Vergleich der Daten	
	if(datum_eingabe == vergleich){
		return true
	}else{
		window.alert("Datum ist ungültig. Bitte Format und Datum prüfen. \n Datumsformat: YYYY-MM-DD - Bsp: 2011-12-31");  
		return false
	}
	
}

Für Tipps bin ich sehr dankbar.

Gruß

Content-Key: 223098

Url: https://administrator.de/contentid/223098

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: colinardo
colinardo 27.11.2013 aktualisiert um 15:47:09 Uhr
Goto Top
Hallo killtec,
das new Date() beginnt bei Monaten bei 0 zu zählen. machs mal so:
function formcheck(){ 
    var datum_eingabe = document.terminadd.datum.value;
    var pattern = /^\d{4}-\d{1,2}-\d{1,2}$/;
    if (pattern.test(datum_eingabe) == true){
        //Format passt, prüfe nun noch ob das Datum gültig ist
    	var dat_in = datum_eingabe.split("-");  
    	var eing_jahr = parseInt(dat_in);
    	var eing_monat = parseInt(dat_in[1]);
    	var eing_tag = parseInt(dat_in[2]);
    	var dateConverted = new Date(eing_jahr,eing_monat-1, eing_tag);
    	if (dateConverted.getFullYear() != eing_jahr || dateConverted.getMonth()+1 != eing_monat || dateConverted.getDate() != eing_tag){
    	   //Datum ist ungültig
    	   alert("Dieses Datum existiert nicht");   
    	   return false;
    	}else{
    	   //Datum ist OK
    	   return true;
    	}
    }else{
        //Datum hat nicht das richtige Eingabeformat
        alert("Datum ist ungültig. Bitte Format prüfen. \n Datumsformat: YYYY-MM-DD - Bsp: 2011-12-31");   
        return false;
    }
	
}
wie man Datum's korrekt erzeugt kannst du hier nachlesen. Außerdem fehlen bei dir so manche Semikolons am Ende von Zeilen...

Grüße Uwe
Mitglied: killtec
killtec 27.11.2013 um 15:11:08 Uhr
Goto Top
Hi Uwe,
dachte mir dass du darauf antwortest face-smile
Lokal klappt es soweit. Werde das heute abend / morgen auf die Seite implementieren und dann Berichten.

Danke dir!
Mitglied: Arano
Arano 27.11.2013 um 20:52:39 Uhr
Goto Top
Hallo killtec

Definiere "Mist" !
Ich kann mir kaum vorstellen das sich ein Popup öffnet in dem nur dieses eine Wort steht: alert("Mist");
...oder hebt dein Tower etwa das Stromkabel und scheidet Mist aus dem NT-Lüfter aus !?

Mit einer Lösungsantwort ala: "Mach das mal __richtig__" wärst du ja auch nicht zufrieden -> Definiere: "richtig" face-wink

	vergleich = objdatum_existiert.getFullYear() + "-" + monat_neu + "-" + tag_neu;  
Die Variablen monat_neu und tag_neu __existieren nicht__ !
bzw. existieren __nur wenn__ die Eingaben kleiner als 10 sind


~Arano
Mitglied: killtec
killtec 28.11.2013 um 08:02:34 Uhr
Goto Top
Hi Arano,
danke für deine Antwort. Das "Mist" war in diesem Sinne, dass er da niht das ausgegeben hat was ich erwartet habe, sondern dass, was er wollte.
Mit Uwe's Lösung funktioniert es (auf jeden Fall schon mal lokal, Im Netz wird später getestet).

Gruß