Ankündigung

Einklappen
Keine Ankündigung bisher.

Geburtsdatum an bestimmtem Datum berechnen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • maeck
    hat ein Thema erstellt Geburtsdatum an bestimmtem Datum berechnen.

    Geburtsdatum an bestimmtem Datum berechnen

    Hallo,

    ich möchte berechnen, wie alt eine Person mit Geburtsdatum, z.B. 09.09.1997 an einem bestimmten Datum, z.B. 06.08.2010 ist.
    Beide Daten liegen mir im englischen Format (yyyy-mm-dd) vor.

    Ich bin leider völlig verwirrt, weil ich schon so viel unterschiedliches darüber gelesen habe.
    Dass man die Schaltjahre mit berechnen muss und dass es dann trotzdem irgendwelche Abweichungen gibt, etc.

    Ich hatte bisher folgende Funktion:
    PHP-Code:
    function getAge($birthdate
    {
        global 
    $eventdate;

        list(
    $eventjahr$eventmonat$eventtag) = explode("-"$eventdate);
        list(
    $gebjahr$gebmonat$gebtag) = explode("-"$birthdate);
        
        return ( 
    $eventjahr-$gebjahr - ($eventmonat.$eventtag < ($gebmonat.$gebtag)) ) ;    

    Leider zeigt mir die Funktion mit obigen Datumswerten an, dass die Person am eventdate (06.08.2010) 13 Jahre alt ist, was aber nicht stimmt, denn die Person ist noch 12.

    Wo ist das Problem?
    Gibt es eine zuverlässige Möglichkeit, das Alter einer Person an einem bestimmten Datum exakt zu bestimmen?

    Danke und Gruß, Marcel

  • Arne Drews
    antwortet
    Ja klar, das war auch nur ne etwas kürzere Alternative, falls Du ne PHP-Version < 5.3.0 hast!

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Zitat von Arne Drews Beitrag anzeigen
    float ist eine Fliesskommazahl, da aber das Alter in Jahren eine Ganzzahl (Integer) ist, verwende ich für sowas halt direkt intval().
    Die Unterschiede zwischen float und int sind mir bekannt, aber ich frage mich, ob sich das unterschiedlich auf das Ergebnis auswirken könnte.

    Mit date_diff bin ich wohl auf der sichereren Seite, dass das Ergebnis stimmt, oder?

    Gruß Marcel

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    float ist eine Fliesskommazahl, da aber das Alter in Jahren eine Ganzzahl (Integer) ist, verwende ich für sowas halt direkt intval().

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Bekommt man mit intval genauere Ergebnisse als mit floor?

    Gruß Marcel

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    PHP-Code:
    $birthdate strtotime('1997-09-09');
    $eventdate strtotime('2010-09-09');

    echo 
    intval(($eventdate $birthdate) / 31536000); 

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Freut mich, ist aber wie gesagt, für PHP-Versionen vor 5.3 bisl ungenau, da ich da auf die schnelle nichts gefunden habe um zwei Datumsangaben zu subtrahieren.

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Zitat von Paul.Schramenko Beitrag anzeigen
    Ich hab da mal was vorbereitet:
    Wow, das funktioniert super, herzlichen Dank!

    Gruß Marcel

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Ich hab da mal was vorbereitet:
    PHP-Code:
    <?php
    error_reporting
    (-1);
    date_default_timezone_set('Europe/Berlin');

    function 
    getAge($birthdate) {
        global 
    $eventdate;
        if (
    version_compare(PHP_VERSION'5.3.0''>=')) {
            
    $bDay = new DateTime($birthdate, new DateTimeZone('Europe/Berlin'));
            
    $eDay = new DateTime($eventdate, new DateTimeZone('Europe/Berlin'));
            
    $interval date_diff($bDay$eDay);
            
            return 
    $interval->format('%Y');
        } else {
            
    $bDay explode('-'$birthdate);
            
    $bDay mktime(000$bDay[1], $bDay[2], $bDay[0]);

            
    $eDay explode('-'$eventdate);
            
    $eDay mktime(000$eDay[1], $eDay[2], $eDay[0]);
            
            
    // inexact in cause of not considered leap year
            
    return (floor(($eDay $bDay)/31536000)); // 60*60*24*365 = 31536000
        
    }
    }

    $eventdate '2010-09-09';
    echo 
    getAge('1997-09-09');

    Einen Kommentar schreiben:


  • Sirke
    antwortet
    Was für ein Alter möchtest du denn haben? Die Jahre samt Nachkommastellen und das exakt oder "nur" das Alter als Anzahl der verstrichenen Geburtstage?

    PHP-Code:
    function calcAge$bday$date 'now' )
    {
        
    $bday = new DateTime$bday );
        
    $date = new DateTime$date );

        
    $age = (int)$date->format'Ymd' ) - (int)$bday->format'Ymd' );
                
        return 
    floor$age 10000 );

    Einen Kommentar schreiben:

Lädt...
X