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

  • 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

  • #2
    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 );

    Kommentar


    • #3
      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');
      "My software never has bugs, it just develops random features."
      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

      Kommentar


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

        Gruß Marcel

        Kommentar


        • #5
          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.
          "My software never has bugs, it just develops random features."
          "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

          Kommentar


          • #6
            PHP-Code:
            $birthdate strtotime('1997-09-09');
            $eventdate strtotime('2010-09-09');

            echo 
            intval(($eventdate $birthdate) / 31536000); 
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Bekommt man mit intval genauere Ergebnisse als mit floor?

              Gruß Marcel

              Kommentar


              • #8
                float ist eine Fliesskommazahl, da aber das Alter in Jahren eine Ganzzahl (Integer) ist, verwende ich für sowas halt direkt intval().
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  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

                  Kommentar


                  • #10
                    Ja klar, das war auch nur ne etwas kürzere Alternative, falls Du ne PHP-Version < 5.3.0 hast!
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar

                    Lädt...
                    X