Hallo nika15
Um bei einer Überprüfung das eine oder das andere zu tun, je nach Ergebnis der Prüfung, kann man das if/else Kontrol-Statement benutzen. Bei mehreren Varianten bietet sich das switch/case Statement an.
Die Überprüfung der Eingabe kann am elegantesten mit einer Regular Expresion überprüft werden, da die Datums-Eingabe numerisch erfolgen muss. Gemäss Aufgabenstellung ergibt dies folgende RegExp:
/(\d{1,2}\.){2}\d{4}/
In deutsch heisst dies:
(\d{1,2}\.) eine oder zwei Ziffern gefolgt von einem Punkt
{2} zwei mal (Tage und Monate haben die selbe Formatierung!)
\d{4} gefolgt von vier Ziffern
Bei der Auswertung des Strings aus der Eingabe kann mittels der Methode split() ein Array erzeugt werden. Dies eignet sich herforragend für weitere Auswertungen und Berechnungen.
Daraus ergibt sich folgende Funktion:
function berechnung() {
var datumsFormat = /(\d{1,2}\.){2}\d{4}/;
var heute = new Date();
if (datumsFormat.test(document.g_datum.geburtstag.value)) {
var geburtsdatum = document.g_datum.geburtstag.value.split(".") //array mit 3 Elementen [Tag,Monat,Jahr]
var alter = heute.getFullYear() - geburtsdatum[2];
if (heute.getMonth() == geburtsdatum[1] && heute.getDate() < geburtsdatum[1] || heute.getMonth() < geburtsdatum[1]) alter--; //Korrektur, wenn Geburtstag noch nicht erreicht
window.alert(alter);
} //if
else alert("Diese Eingabe ist nicht korrekt!");
}//function berechnung()
Wenn eher ein Zeitraum gesucht wird, kann man mit Date-Objekten Rechnen. Für die gestellt Aufgabe ergäbe dies in wenigen Fällen eine Abweichung von einem Jahr (wegen Schaltjahren).
geburtsdatum[1]--; //Monat muss für das Date-Objekt 0-basierend gezählt werden
geburtsdatum = new Date(geburtsdatum[2],geburtsdatum[1],geburtsdatum[0]); //konvertieren in Date-Objekt
var alter = heute - geburtsdatum; //alter in ms
window.alert(math.floor(alter/(365.25*24*60*60*1000))); //Ein durchschnittliches Jahr hat 365.25 Tage, 24 Stunden pro Tag, 60 Minuten pro Stunde, 60 Sekunden pro Minute und 1000 Millisekunden pro Sekunde. Das Date-Objekt wird in Millisekunden verwaltet.
HTH
(Dieser Beitrag wurde von Markus Walker am 17. Aug 2004, 12:43 geändert)