Probleme bei Datumsprüfungen

Gebot

Mitglied
Hi,
Ich muss mit einem Javascript 2 Daten prüfen. Der benutzer kann ein start Datum und ein enddatumd eingeben. Jetzt sollen die Daten einzeln geprüfet werden das man zum beispiel nicht den 31.2. eingeben kann und das ganze auch unter Berücksichtigung von Schaltjahren. Wenn Start- und Enddatum korrekt sind soll geprüt werden ob das Startdatum auch vor dem Enddatum liegt. Mein script funktioniert eigentlich soweit nur sobald das jahr der beiden daten gleich und der monat auch gleich ist gibt es probleme. als Beispiel:

Startdatum: 29.2.2000
Enddatum: 4.2.2000

Hier sagt das script es wäre ein korrektes Datum. Vielleicht kann mir hier jemand helfen. Ich poste nur das javascript. Die daten kommen aus drop down menus. Weiterhin muss das Script nur im Internetexplorer funktionieren

Script:

Code:
   <script type="text/javascript">
   <!--
   
   function chk_start_end(day,month,year) {
   
   var date_check = true;
   var year_check = false;
   
    if ((year % 400) == 0)  
   {	 
   	year_check = true; 
   }
   else if ((year % 100) == 0) 
   { 
   	year_check = false;
   	
   	if ((year % 4) == 0)   
   	{ 
   		year_check = true; 
   	}
   }
    
   switch(month)
   {
   case "4":
   
   case "6":
   
   case "9":
   
   case "11":
   
   	if(day > 30)
   	{
   		date_check = false;
   	}
   
   break;
   
   case "2":
     
   	if(year_check == true)
   	{
   		if(day > 29)
   		{
   			date_check = false;
   		}
   	}
   	else
   	{
   		if(day > 28)
   		{
   			date_check = false;
   		}
   	}
   
   break;
   } // end switch / case
   
   if(date_check == false)
   {
   	return false;
   }
   else
   {
   	return true;
   }
   
   } // end chk_start_end( ) function
   
   function chkdate() {
   
   var start_day = Formular.start_day.value;
   var start_month = Formular.start_month.value;
   var start_year = Formular.start_year.value;
   
   var end_day = Formular.end_day.value;
   var end_month = Formular.end_month.value;
   var end_year = Formular.end_year.value;
   
   var date_start_end = true;
   
   if(chk_start_end(start_day,start_month,start_year) == false) { date_start_end = false;  }
   if(chk_start_end(end_day,end_month,end_year) == false) { date_start_end = false; }
   
   if(date_start_end == true)
   {
   	if (end_year > start_year)
   	{
   		date_start_end = true;
   	}
   	else if (end_year == start_year)
   	{
   		if (end_month > start_month)
   		{
   			date_start_end = true;
   		}
   		else if(end_month == start_month)
   		{
   			if (end_day > start_day)
   			{
   				date_start_end = true;
   			}
   			else
   			{
   				date_start_end = false;
   			}
   		}
   		else
   		{
   			date_start_end = false;
   		}
   	}
   	else
   	{
   		date_start_end = false;
   	}
   		
   }
   
   
   document.write(date_start_end);
   if(date_start_end == true)
   { alert("DEBUG: Date valid -> submit"); }
   else { alert("the date is not valid"); }
   
   } //end of function
 
Das Problem ist, dass die Eingaben als Zeichenkette und nicht als Datum verglichen werden.
Eine Zeichenkette, welche mit 1 beginnt ist bei einem solchen Vergleich immer kleiner, als eine Zeichenkette, welche mit einer höheren Ziffer beginnt... was danach kommt, spielt keine Rolle.

Wandle die eingegebenen Daten in Zeitstempel um... diese kannst du dann ordentlich vergleichen.
 
Hi danke schonmal... das leuchtet mir ein...

Kannst du mir noch ne kleine anhilfe geben?

Ich bin javascript das is mein erstes script ^^ ich hab am freitag abend mit javascript lernen begonnen ^^

Gruß
Gebot
 
Du musst zuerst 2 Datumsobjekte erzeugen aus den eingegebenen Daten.
Ein Datumsobjekt erzeugst du bspw. per
Code:
new Date(Jahr, Monat, Tag)
dabei musst du beachten, dass du von Monat 1 abziehst(dort wird bei 0 zu zählen begonnen... für den Januar bspw. also 0 angeben)

in deinem Beispiel wäre das also ca:
Code:
//start
new Date(start_day,start_month-1,start_day)
//ende
new Date(end_day,end_month-1,end_day)

Den Zeitstempel(Millisekunden, welche seit dem 1.1.1970 vergangen sind) zu ermitteln, besitzt das Date-Objekt die Methode getTime()
in deinem Code sollte der Vergleich dann ca. so aussehen:
Code:
if(new Date(start_day,start_month-1,start_day).getTime() > new Date(end_day,end_month-1,end_day).getTime())
    {
        alert('Fehler:Anfangsdatum>Enddatum');
    }

Beachte dabei, dass beim Erzeugen eines Datumsobjektes nicht geprüft wird, ob das Datum wirklich existiert... deine bisherige Prüfung(Schaltjahr etc.) musst du also beibehalten.

Infos zum Datums-Objekt: http://selfhtml.teamone.de/javascript/objekte/date.htm
 
Hi

Ich danke für die hilfe ich habe jedoch eine einfacher methode gefunden indem ich die einzelnen werte mit parseInt(...) umwandel.

Troztdem danke für deine Hilfe :)
 

Neue Beiträge

Zurück