[GastForen Programmierung/Entwicklung JavaScript alter berechnen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

alter berechnen

nika15
Beiträge gesamt: 69

16. Aug 2004, 19:14
Beitrag # 1 von 8
Bewertung:
(8740 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
wer kann mir mein script korrigieren ?finde die/den fehler nicht!




<html>

<head>
<title></title>

<script type="text/javascript">
<!--

function berechnung()
{
if (jahr == 0 || jahr == isNaN || jahr.length < 4 || monat == 0 || monat == isNaN || tag == 0 || tag == isNaN)
alert("Diese Eingabe ist nicht korrekt!");
// wie funktion abbrechen ?? mit break; geht dann gar nichts mehr??

var geburtsdatum = document.g_datum.geburtstag.value;
var punkt1 = geburtsdatum.indexOf(".");
var punkt2 = geburtsdatum.indexOf(".", punkt1 + 1);
var tag = geburtsdatum.substr(0, punkt1);
var monat = geburtsdatum.substr(punkt1 + 1, punkt2 - (punkt1 + 1));
var jahr = geburtsdatum.substr(punkt1 + 1, punkt2 + 1, - (punkt1 + 1 - punkt2)); //???

var geburtstag = new Date(jahr,monat - 1, tag);
var heute = new Date();
var alter = heute.getFullYear() - geburtstag.getFullYear();

// wenn der monat noch nicht erreicht ist => 1 jahr abziehen
if (heute.getMonth() < geburtstag.getMonth())
alter = alter - 1;
else { // richtiger monat aber der tag ist noch nicht erreicht => 1 Jahr abziehen


if (heute.getMonth() == geburtstag.getMonth() &&
heute.getDate() < geburtstag.getDate())
alter = alter - 1;
}

alert("Sie sind" +Math.ceil(alter)+ "Jahre alt!");
}




// -->
</script>

</head>
<body>
<br><br><br>
<table border="0" width="100%">
<tr><td>

<form name="g_datum">
<table border="0" align="center" cellpadding="8">
<tr height="30">
<td> Geburtsdatum: </td>
<td><input type="text" name="geburtstag" size=10"> (Tag.Monat.Jahr)</td></tr>
<td colspan=2><br><input type="button" name="rechnen" value="Alter anzeigen" onClick="berechnung();"></td>
</tr>
</table>
</form>


</td></tr>
</table>
<br><br><br>
<noscript>Ihr Browser versteht leider kein JavaScript! </noscript>

</body>
</html>

(Dieser Beitrag wurde von nika15 am 10. Nov 2004, 23:08 geändert)
X

alter berechnen

Markus Walker
Beiträge gesamt: 494

17. Aug 2004, 12:36
Beitrag # 2 von 8
Beitrag ID: #103520
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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


als Antwort auf: [#103360]
(Dieser Beitrag wurde von Markus Walker am 17. Aug 2004, 12:43 geändert)

alter berechnen

Anonym
Beiträge gesamt: 22827

17. Aug 2004, 12:47
Beitrag # 3 von 8
Beitrag ID: #103525
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Anmerkung:

dieser Ausdruck wird vom IE5 nicht unterstützt.
/(\d{1,2}\.){2}\d{4}/

besser ist hier

/^(\d\d)\.(\d\d)\.(\d\d\d\d)$/

oesi

[Edited: \ Backslashes eingefügt, diese müssen doppelt eingegeben werden, da das Forum den ersten frisst... -- Markus]


als Antwort auf: [#103360]
(Dieser Beitrag wurde von Markus Walker am 17. Aug 2004, 18:09 geändert)

alter berechnen

oesi50
  
Beiträge gesamt: 2315

17. Aug 2004, 12:56
Beitrag # 4 von 8
Beitrag ID: #103529
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
das kann man hier nachprüfen
http://vsrv.de/examples/regex3.html

Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#103360]
(Dieser Beitrag wurde von oesi50 am 17. Aug 2004, 13:12 geändert)

alter berechnen

Markus Walker
Beiträge gesamt: 494

17. Aug 2004, 18:30
Beitrag # 5 von 8
Beitrag ID: #103611
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@oesi: Ich konnte Deine Bemerkung betreffs IE5 nicht verifizieren. Die obige RegExp lief bei mit mit IE 5.00 auf Win98SE und WinNT einwandfrei. Kannst Du Näheres dazu berichten?

Zur Erklärung der RegExp von Oesi:
^ Anfang des Strings
(\d\d) gefolgt von zwei Ziffern
\. gefolgt von einem Punkt
(\d\d) gefolgt von nochmals zwei Ziffern
\. gefolgt von einem Punkt
(\d\d\d\d) gefolgt von vier Ziffern
$ gefolgt vom Ende des Strings

Der Unterschied ist, dass der Anfang und das Ende und somit die Stringlänge auch festgelegt wird. Der Rest ist gleich, einfach anderst formuliert ;-). Aber bei RegExp muss man manchmal anderst formulieren, da sie in der Tat manchmal nicht vollständig implementiert sind.


Trotzdem haben sich zwei Fehler eingeschlichen, welche sich beim nachträglichen Testen bemerkbar machten. So fehlte in der ersten Variante der Auswertung folgende Zeile:

geburtsdatum[1]--; //Monat muss für das Date-Objekt 0-basierend gezählt werden

Und beim if Statement habe ich etwas schnell kopiert. So muss die Funktion wiefolgt aussehen:

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]
geburtsdatum[1]--; //Monat muss für das Date-Objekt 0-basierend gezählt werden
var alter = heute.getFullYear() - geburtsdatum[2];
if (heute.getMonth() == geburtsdatum[1] && heute.getDate() < geburtsdatum[0] || heute.getMonth() < geburtsdatum[1]) alter--; //Korrektur, wenn Geburtstag noch nicht erreicht
window.alert(alter);
} //if
else alert("Diese Eingabe ist nicht korrekt!");
}//function berechnung()


HTH


als Antwort auf: [#103360]

alter berechnen

oesi50
  
Beiträge gesamt: 2315

17. Aug 2004, 18:51
Beitrag # 6 von 8
Beitrag ID: #103615
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@markus

Ich habe zum Testen einen IE5.00.3505.1000, mit dem geht d{1,2} und d+? nicht. Möglicherweise existieren hier unterschiedliche Versionen.
Und da ich immer darauf achte, alles, soweit wie möglich, abwärtskompatibel zu machen, verzichte ich halt darauf.

Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#103360]
(Dieser Beitrag wurde von oesi50 am 17. Aug 2004, 18:54 geändert)

alter berechnen

Markus Walker
Beiträge gesamt: 494

17. Aug 2004, 19:19
Beitrag # 7 von 8
Beitrag ID: #103621
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@oesi: Ja, da sieht man es wieder mal, die feinen Unterschiede... Ich testete mit IE 5.00.2919.6307. Keine Ahnung, ob diese Version nun jünger oder älter ist als Deine.


als Antwort auf: [#103360]

alter berechnen

Anonym
Beiträge gesamt: 22827

17. Aug 2004, 21:30
Beitrag # 8 von 8
Beitrag ID: #103632
Bewertung:
(8739 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
herzlichen dank :-)))

nika


als Antwort auf: [#103360]
X

Aktuell

PDF / Print
300_PDF20

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022