Hallo,
also ich habe mir das Script nochmal angeschaut und es war wirklich so das da keine bestimmten Fehlermeldungen definiert waren. Es wurde immer die aus den Element Optionen genommen.
Ich hab das ganze jetzt mal ein wenig überarbeitet und Fehlermeldungen eingebaut die etwas aussagekräftiger sind.
function ff_validbirthdate(element, message) {
var checkstr = "0123456789";
var DateField = element;
var DateValue = "";
var DateTemp = "";
var seperator = ".";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
var min_age = 18;
err = 0;
DateValue = DateField.value;
/* Entfernt alle Zeichen ausser die Zahlen 0 bis 9 */
for (i = 0; i < DateValue.length; i++) {
if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
DateTemp = DateTemp + DateValue.substr(i,1);
}
}
DateValue = DateTemp;
/* Bestimmt den Monat aus dem String und korrigiert es falls das Jahr nur zweistellig eingegeben wurde (alles was grösser wie 35 ist kriegt ein 19 davor sonst 20) */
if (DateValue.length == 6 ){
if (DateValue.substr(DateValue.length-2,DateValue.length) > 35){
year = "19" + DateValue.substr(4,2);
} else {
year = "20" + DateValue.substr(4,2);
}
} else {
year = DateValue.substr(4,4);
}
/* Falls das Jahr nicht ein korrektes format 1999 oder 99 hat */
if (DateValue.length > 8 || DateValue.length < 6) { err = 19;}
/* Falls das Jahr unzulässig ist sprich 0000 */
if (err == 19) { ff_validationFocus(element.name); return 'Falsches Format für das Jahr'; }
/* Bestimmt den Monat aus dem String */
month = DateValue.substr(2,2);
/* Falls der Monat nicht zulässig ist sprich 00 oder 13 */
if ((month < 1) || (month > 12)) { err = 21; }
/* Bestimmt den Tag aus dem String */
day = DateValue.substr(0,2);
/* Falls der Tag nicht zulässig ist sprich 00 oder 13 */
if ((day < 1) || (day > 31)) { err = 22; }
/* Hier wird das Schaltjahr berechnet */
if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) { leap = 1; }
if ((month == 2) && (leap == 1) && (day > 29)) { err = 23; }
if ((month == 2) && (leap != 1) && (day > 28)) { err = 24; }
/* Länge der Monate wird definiert */
if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) { err = 25; }
if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) { err = 26; }
/* Wenn bisher kein Fehler, wird das eingabefeld korrekt angepasst */
if (err == 0) {
DateField.value = day + seperator + month + seperator + year;
} else {
ff_validationFocus(element.name);
return 'Falsches Format für Tag oder Monat';
}
/* Hier wird das angegebene Datum zusammengefügt und 18 jahre werden dazugerechnet */
var theirDate = new Date((Number(year) + min_age), month-1, day);
/* Heutiges Datum wird gelesen */
var today = new Date;
/* Hier wird das Alter gerechnet auf den Tag genau */
var ergeb = ((((((today.getTime() - theirDate.getTime()) / 1000)/60)/60)/24)/365.25);
/* Hier wird berechnet ob die Person ein bestimmtes alter hab (bei mir min 18 max 70 jahre */
if ((ergeb < 0.00) || (ergeb > 52.00)) {
ff_validationFocus(element.name);
return 'Sie haben das Falsche Alter erlaubt is 18-70 Jahre';
//ff_returnHome();
}
return;
}
Ich hab jetzt nicht alles getestet aber ich hoffe es hilft dir schonmal weiter.
Gruß,
Syno