# Alter berechnen zu bestimmten Datum



## nkh2016 (3. Januar 2018)

Hallo....

Ich habe folgendes script, welches mir das Alter zu einem bestimmten Datum (in meinem Beispiel zum 01.12.2018} berechnen soll....

Jedoch weicht das tatsächliche Alter (in Jahren) immer um einige Tage ab....


Ich glaube, dass die Schaltjahre nicht berücksichtigt werden... 

In einem Textfeld (geburtsdatum) wird das Geburtsdatum eingegeben....
Im zweiten Textfeld (alterbewerbstag) soll das Alter in Jahren ausgegeben werden....

Es handelt sich dabei um ein Formular für Joomla (Breezingforms...)....



```
[I]function myCal() {
age= '';
current = ff_getElementByName('geburtsdatum').value;
if( age != current ) {
var one_year = 1000*60*60*24*365;
var date = new Date();
var tmpbd = ff_getElementByName('geburtsdatum').value;
var tmp = tmpbd.split('/');
var dob = new Date(tmp[2],tmp[1],tmp[0]-1);
var y1 = new Date(2018,12,1);; // Monat -1 zählen... zb Oktober = 9 (nicht 10)
var y2 = dob.getTime();
var age = Math. floor((y1-y2)/one_year);
ff_getElementByName('alterbewerbstag').value = age;
//adding readonly
var field_name = 'alterbewerbstag';
var input = JQuery('[name="ff_nm_'+field_name+'[]"]');
jQuery(input).prop('readonly', true);
}
}
```

Siehe beiliegendes Bild - zeigt die Fehlerabweichung der Tage zu einem bestimmten "Geburtstag"....

Weiß jemand, wie man dies löschen kann?

Herzlichen Dank für eure Mühe und Hilfe...



	

		
			
		

		
	
 [/I]


----------



## Technipion (3. Januar 2018)

Hallo nkh2016,
JavaScript ist kein Java! https://www.tutorials.de/threads/java-ist-kein-javascript.174376/

Zu deinem Problem: Dein Code ist ein bisschen Overkill. Wenn ich dich richtig verstehe, möchtest du einfach nur das Alter einer Person zu einem gewissen Datum bestimmen. Sagen wir mal die Person hat am Datum aa.bb.cccc Geburtstag. Du interessierst dich für das Alter der Person am Tag xx.yy.zzzz...
Das Alter kriegst du ganz einfach heraus. Sagen wir du bist am 22.11.2002 geboren. Wie alt bist du dann am 03.03.2003? Antwort: 0. Wie alt bist du aber ab dem 22.11.2003? Genau: 1. Also allgemein: Du bist mindestens zzzz - cccc - 1 Jahre alt (natürlich nur wenn zzzz > cccc). Jetzt musst du nur noch prüfen, ob der Geburtstag der Person im Jahr zzzz schon stattgefunden hat. Das überlasse ich mal dir.

Gruß Technipion


----------



## ComFreek (3. Januar 2018)

Am besten berechnet man Alter odere andere Sachen mit Datums- und/oder Zeitangaben *nicht* selbst. Es gibt einfach zu viele Unregelmäßigkeiten, siehe z. B. https://stackoverflow.com/questions...se-two-times-in-1927-giving-a-strange-result/.

Auch hier bei folgendem Link wird beispielsweise "off by around 10-20 hours depending on the date" mehrmals bei verschiedenen Antworten angemerkt: https://stackoverflow.com/questions...e-given-the-birth-date-in-the-format-yyyymmdd

Idealerweise möchtest du eine Datumsbibliothek nutzen wie moment.js. Wenn dir das zu viel Overhead ist und 10-20 Stunden Abweichung kein Problem ist, dann nimm eine Lösung aus obigem Link. Sei dir nur bewusst, dass dein Programm in manchen Fällen eine falsche Antwort liefert.


----------



## nkh2016 (4. Januar 2018)

Entschuldigung, dass ich im falschen Forum gepostet habe...

Danke auch für die Antworten....

Finde aber trotzdem zu keiner Lösung...


----------



## ComFreek (4. Januar 2018)

nkh2016 hat gesagt.:


> Finde aber trotzdem zu keiner Lösung...


Bei meinem zweiten Link gibt es mindestens 10 verschiedene (stark in der Qualität schwankende) Lösungen. Welche davon hast du probiert? Warum funktionieren sie nicht?


----------



## Technipion (6. Januar 2018)

Hallo nkh2016,
in dem zweiten Link von ComFreek sind doch mehr als 4 verschiedene Lösungen vorgestellt. Die kannst du praktisch Kopieren und Einfügen, und sie sollten laufen. Also wo genau ist das Problem?

Ich habe dir außerdem gezeigt, wie du dir ganz einfach selbst einen Algorithmus überlegen kannst, mit dem das legale Alter einer Person in Jahren ermittelt werden kann. Hier ist der (sehr schnell angefertigte) Pseudocode:


Spoiler: Pseudocode





```
birth_year := Geburtsjahr
birth_month := Geburtsmonat
birth_day := Monatstag des Geburtsdatums

date_year := Jahr des Zieldatums
date_month := Monat des Zieldatums
date_day := Monatstag des Zieldatums


function get_age()
{
    if date_year <= birth_year:
        // Person ist noch kein Jahr alt
        return 0;
  
    age = date_year - birth_year - 1; // Mindestalter
  
    if date_month > birth_month:
        // Der Geburtsmonat der Person war dieses Jahr schon
        age += 1;
  
    if date_month == birth_month:
        // Wir sind im Geburtsmonat der Person
        if date_day >= birth_day:
            // Der Geburtstag der Person war aber schon
            age += 1;
  
    return age;
}
```




Das sollte sich eigentlich recht schnell in JavaScript implementieren lassen 

Gruß Technipion


----------

