• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Hilfe zu Javascript gesucht!

xplox

Member
Hallo

hier ist mein Script:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Testseite!</title>
	<script type="text/javascript" >
		function checkDate(field, namevar)
		{
			var now = new Date();
			//thisyear is 2008 == 2008
			var thisyear = parseInt(now.getFullYear());
			
			//replace of coma for point, if exits!
			var datum = field.value;
			datum = datum.replace(/,/g, ".");
			
			if(datum != null && datum.length >= 0 && datum.length <= 10)
			{
				var sVD = datum.split(".");
				
				if(sVD.length == 3)
				{
					if(sVD[0].length == 1)
						sVD[0] = "0" + sVD[0];
					if(sVD[1].length == 1)
						sVD[1] = "0" + sVD[1];
					if(sVD[2].length == 2)
					{
						if((thisyear - 2000) > parseInt(sVD[2]))
							sVD[2] = "20" + sVD[2];
						else
							sVD[2] = "19" + sVD[2];
					}
					
					if(!(parseInt(sVD[0] >= 1 && parseInt(sVD[0] <= 31) ||
					   !(parseInt(sVD[1] >= 1 && parseInt(sVD[1] <= 12) ||
					   !(parseInt(sVD[2] >= (thisyear - 130) && parseInt(sVD[2]) <= thisyear))
					{
						window.alert("Die Zeichenkette '" + datum + "' kann nicht konvertiert werden! Bitte im Format (DD.MM.YYYY) oder (DD,MM,YYYY) oder (D.M.YY) oder (D,M,Y) eingeben!");
						document.getElementById(namevar).style.backgroundColor = 'red';
						document.getElementById(namevar).style.color = 'white';
					}   
					else {
						datum = sVD[0] + "." + sVD[1] + "." + sVD[2];
						document.getElementById(namevar).style.backgroundColor = 'white';
						document.getElementById(namevar).style.color = 'black';
					}
				}
				else {
					window.alert("Die Zeichenkette '" + datum + "' kann nicht konvertiert werden! Bitte im Format (DD.MM.YYYY) oder (DD,MM,YYYY) oder (D.M.YY) oder (D,M,Y) eingeben!");
					document.getElementById(namevar).style.backgroundColor = 'red';
					document.getElementById(namevar).style.color = 'white';
				}
			}//if
			
			document.getElementById(namevar).value = datum;
		}
		
	</script>
</head>

<body>
<form method="post" action="">
    <input type="text" name="textfield" id="textfield" onchange="checkDate(this, 'textfield');"/>
</form>
</body>
</html>

Kann es mal bitte jemand von euch testen und mir sagen, wieso sich das Script nicht ausführen lässt. Wenn ich Teile davon teste funktioniert es einwandfrei.
Was es können soll ist folgendes:

- Bei der Eingabe eines Datums soll möglich sein, dass man das Datum auch per Komma eintragen kann,
- dass die Kommas durch Punkte ersetzt werden,
- dass das Datum auf Gültigkeit validiert wird.
- dass kein Datum in der Zukunft liegen kann.
- dass

Testdatensätze sind zum Beispiel:
(1) 1,1,09 = 01.01.1909
(2) 31,12,08 = 31.12.2008
(3) 32,12,3 = ungültig
(4) 24,08,78 = 24.08.1978
(5) 13.05.77 = 13.05.2077
(5) 00.01.76 = ungültig


Hoffe es weiß jemand von euch weiter.


@edit:
Ich hab das mit den Klammern jetzt verbessert. Allerdings gibt es immer noch ein Problem mit den Werten 8 und 9 bei den Wochen, Monaten und Jahren.
... Jemand noch ne Idee
 
Zuletzt bearbeitet:
Du solltest Dir mal anschauen, was die Fehlerkonsole zu Deinem Skript zu melden hat.
Alternativ solltest Du mal Deine Klammern zählen.
 
@edit:
Ich hab das mit den Klammern jetzt verbessert. Allerdings gibt es immer noch ein Problem mit den Werten 8 und 9 bei den Wochen, Monaten und Jahren.
... Jemand noch ne Idee
 
Führt das doch mal bitte mit dem 8,8,08 bzw 08.08.2008 oder 9,9,09 bzw 09.09.2009 aus und sagt mir wieso es nicht funktioniert!

PHP:
function checkDate(field, namevar)
{
    var now = new Date();
    //thisyear is 2008 == 2008
    var thisyear = parseInt(now.getFullYear());
    
    //replace of coma for point, if exits!
    var datum = field.value;
    datum = datum.replace(/,/g, ".");
    
    if(field.value.length == 0)
    {
    	document.getElementById(namevar).value = "";
        document.getElementById(namevar).style.backgroundColor = 'white';
        document.getElementById(namevar).style.color = 'black';
    }
    
    if(datum != null && datum.length >= 0 && datum.length <= 10)
    {
        var sVD = datum.split(".");
        
        if(sVD.length == 3)
        {
            if(sVD[0].length == 1)
            {
            	//Workaround!
            	if(sVD[0] == "08")
            		sVD[0] = 8;
            	if(sVD[0] == "09")
            		sVD[0] = 9;
            	
                sVD[0] = "0" + sVD[0];
            }
            if(sVD[1].length == 1)
            {
            	//Workaround!
            	if(sVD[1] == "08")
            		sVD[1] = 8;
            	if(sVD[1] == "09")
            		sVD[1] = 9;
            	
                sVD[1] = "0" + sVD[1];
            }
            if(sVD[2].length == 2)
            {
            	//Workaround!
            	if(sVD[2] == "08")
            		sVD[2] = 8;
            	if(sVD[2] == "09")
            		sVD[2] = 9;
            	
            	//normaler Check!
                if((thisyear - 2000) > parseInt(sVD[2]))
                    sVD[2] = "20" + sVD[2];
                else
                    sVD[2] = "19" + sVD[2];
            }
            
            window.alert("TAG: " + sVD[0] + " " + parseInt(sVD[0]));
            window.alert("MONAT: " + sVD[1] + " " + parseInt(sVD[1]));
            window.alert("JAHR: " + thisyear + " " + (thisyear-130) + " " + sVD[2] + " " + parseInt(sVD[2]));
            if(!(parseInt(sVD[0]) >= 1 && parseInt(sVD[0]) <= 31) ||
               !(parseInt(sVD[1]) >= 1 && parseInt(sVD[1]) <= 12) ||
               !(parseInt(sVD[2]) >= (thisyear - 130) && parseInt(sVD[2]) <= thisyear))
            {
                window.alert("Datum '" + datum + "' ungültig! Bitte überprüfen.");
                document.getElementById(namevar).style.backgroundColor = 'red';
                document.getElementById(namevar).style.color = 'white';
            }   
            else {
                datum = sVD[0] + "." + sVD[1] + "." + sVD[2];
                document.getElementById(namevar).style.backgroundColor = 'white';
                document.getElementById(namevar).style.color = 'black';
            }
        }
        else {
            window.alert("Die Zeichenkette '" + datum + "' kann nicht konvertiert werden! Bitte im Format (DD.MM.YYYY) oder (DD,MM,YYYY) eingeben!");
            document.getElementById(namevar).style.backgroundColor = 'red';
            document.getElementById(namevar).style.color = 'white';
        }
    }//if
    
    document.getElementById(namevar).value = datum;
}

PHP:
..
 <input type="text" id="tam" onblur="checkDate(this, 'tam')" maxlength="10" />
..


## DANKE ##


PS: Alternativ könnt ihr es auch ohne den Workaround probieren. Funktioniert so oder so irgendwie nicht. Keine Ahnung warum!
 
hab folgendes dazu bei selfhtml gefunden

###### ZITAT ####################################
parseInt("08") = 0 ??

Die folgende Nachricht zum Thema stammt von: wahsaga, 26. 02. 2005, 22:53

hi,

»» Warum ergibt parseInt("08") nicht 8?
»»
»» javascript:alert(parseInt('07')); --> 7
»» javascript:alert(parseInt('08')); --> 0

weil zahlen mit führender null in javascript oktalzahlen sind.

zusätzliche angabe der basis des zahlensystems schafft abhilfe ->
parseInt('08', 10)

gruß,
wahsaga

#############################################
 
Ein Datum kannst du einfacher checken. Ich verwende dazu einen Prototyp für das String Objekt.
PHP:
///////////////////////////////////////////////////////////
//
// string2date(string)
//
// string => TT.MM.YYYY HH:MM:SS
// Das Trennzeichen kann ein: "./-" sein
// prüft einen String auf ein gültiges Datum
// gibt ein Datum Objekt oder null zurück

String.prototype.date = function ()
{
    var string = this;
    string = string.replace(/[-\/]/g, '.'); // Trennzeichen normalisieren
    string = string.replace(/[^0-9^\.^\:^ ]/g, ''); // ungültige Zeichen entfernen
    string = string.replace(/ +/g, ' '); // doppelte Leerzeichen entfernen
    var uhr = string.split(" "); // Uhrzeit abtrennen
    var split = uhr[0].split(".");
    var day = parseInt(split[0], 10);
    var month = parseInt(split[1] || 0, 10);
    var year = parseInt(split[2] || 0, 10);

    if(isNaN(year)) year = (new Date).getFullYear();

    var check = new Date(year, month - 1, day);
    if(uhr[1])
    {
         var u = uhr[1].split(':');
         check.setHours( u[0] || 0 );
         check.setMinutes( u[1] || 0 );
         check.setSeconds( u[2] || 0 );
    }

    var day2 = check.getDate();
    var year2 = check.getFullYear();
    var month2 = check.getMonth() + 1;

    return ( year2 == year && month == month2 && day == day2 ) ? check
    : null;
}

PHP:
<form action="">
<input onblur="alert(this.value.date())"></form>
 
Zurück
Oben