Gunnar: Alter einer Person berechnen

Hallo,

wie kann ich am einfachsten das Alter einer Person berechnen, wenn ich den Geburtstag und das heutige Datum habe.

$gebTag = '1973-03-11';
$heute  = '2002-07-28';

Für Hilfe wäre ich sehr dankbar.

Gunnar

  1. PS: Ich bräuchte das Alter in Jahren!

    Hallo,

    wie kann ich am einfachsten das Alter einer Person berechnen, wenn ich den Geburtstag und das heutige Datum habe.

    $gebTag = '1973-03-11';
    $heute  = '2002-07-28';

    Für Hilfe wäre ich sehr dankbar.

    Gunnar

    1. Aloha!

      wie kann ich am einfachsten das Alter einer Person berechnen, wenn ich den Geburtstag und das heutige Datum habe.

      $gebTag = '1973-03-11';
      $heute  = '2002-07-28';

      PS: Ich bräuchte das Alter in Jahren!

      Rechne das Datum jeweils in eine computertaugliche Zeit um, beispielsweise in Sekunden ab einem festen Zeitpunkt, subtrahiere beide voneinander, und rechne die resultierenden Sekunden wieder um in Jahre.

      Helfende Funktionen in PHP zur Datumsbearbeitung :

      strtotime() http://www.php.net/manual/de/function.strtotime.php:
      Umwandlung eines Datums in Sekunden (Unix-Timestamp)
      date() http://www.php.net/manual/de/function.date.php
      Umwandlung eines Unix-Timestamp in ein Datum.

      Wenn du dich außerhalb des von PHP unterstützten Zeitraumes bewegst (Windows: 1970-2038, Unix: 1901-2038), dann mußt du wohl oder übel deine eigenen Zeitrechnungsfunktionen schreiben.

      - Sven Rautenberg

  2. Hallo,

    wie kann ich am einfachsten das Alter einer Person berechnen, wenn ich den Geburtstag und das heutige Datum habe.

    $gebTag = '1973-03-11';
    $heute  = '2002-07-28';

    Unter Nutzung von getdate() und mktime() kann das so geloest werden:

    <?php

    $gebTag='1973-03-11';
    $heute='2002-07-28';

    $gebjahr=getdate(mktime(0,0,0,intval(substr($gebTag,5,2)),intval(substr($gebTag,8,2)),intval(substr($gebTag,0,4))));
    $aktjahr=getdate(mktime(0,0,0,intval(substr($heute,5,2)),intval(substr($heute,8,2)),intval(substr($heute,0,4))));

    $alter=$aktjahr[year]-$gebjahr[year];
    print "Alter: ".$alter; // --> 29

    ?>

    MfG, Thomas

    1. [nachtrag/Korrektur:]

      Mein erster Versuch ergab nur die direkte Differenz der Jahreszahlen, d. h. z. B. einen Tag vor dem Geburtstag ergab sich bereits das neue Alter.
      So sollte es besser klappen:

      <?php

      $gebTag='1973-03-11';
      $heute='2002-07-28';

      $gebdate=mktime(0,0,0,intval(substr($gebTag,5,2)),intval(substr($gebTag,8,2)),intval(substr($gebTag,0,4)));
      $aktdate=mktime(0,0,0,intval(substr($heute,5,2)),intval(substr($heute,8,2)),intval(substr($heute,0,4)));
      $diff=getdate($aktdate-$gebdate);
      $alter=$diff[year]-1970;

      print "Alter: ".$alter; // --> 29

      ?>

      MfG, Thomas

      1. hallo,
        Ich habe das mal ausprobiert, aber warum verechnet sich meine lösung um ein Jahr

        http://mitglied.lycos.de/djwoelk3/djwoelk/geb1.php

        hier der code:
        geb1.php:

        <html>
        <body>
          <form method="POST" action="geb2.php">
        <div align="left">
                  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="760">
                    <tr>
                      <td width="72"></td>
                      <td width="139"><font size="2">Dein Geburtsdatum</font></td>
                      <td width="549">
                      <input type="text" name="jahr" size="4" value="Jahr">-<select size="1" name="monat">
                      <option>01</option>
                      <option>02</option>
                      <option>03</option>
                      <option>04</option>
                      <option>05</option>
                      <option>06</option>
                      <option>07</option>
                      <option>08</option>
                      <option>09</option>
                      <option>10</option>
                      <option>11</option>
                      <option>12</option>
                      </select>-<select size="1" name="tag">
                      <option>01</option>
                      <option>02</option>
                      <option>03</option>
                      <option>04</option>
                      <option>05</option>
                      <option>06</option>
                      <option>07</option>
                      <option>08</option>
                      <option>09</option>
                      <option>10</option>
                      <option>11</option>
                      <option>12</option>
                      <option>13</option>
                      <option>14</option>
                      <option>15</option>
                      <option>16</option>
                      <option>17</option>
                      <option>18</option>
                      <option>19</option>
                      <option>20</option>
                      <option>21</option>
                      <option>22</option>
                      <option>23</option>
                      <option>24</option>
                      <option>25</option>
                      <option>26</option>
                      <option>27</option>
                      <option>28</option>
                      <option>29</option>
                      <option>30</option>
                      <option>31</option>
                      </select></td>
                    </tr>
                    <tr>
                      <td width="72"></td>
                    </tr>
                    <tr>
                      <td width="72"> </td>
                      <td width="139"> </td>
                      <td width="549"><input type="submit" value="Alter Berechnen"></td>
                    </tr>
                  </table>
                </div>
              </form>
        </html>
        </body>

        ---------

        geb2.php:

        <?php

        $gebTag=$jahr.$monat.$tag;
        $heute='2002-07-28';

        $gebdate=mktime(0,0,0,intval(substr($gebTag,5,2)),intval(substr($gebTag,8,2)),intval(substr($gebTag,0,4)));
        $aktdate=mktime(0,0,0,intval(substr($heute,5,2)),intval(substr($heute,8,2)),intval(substr($heute,0,4)));
        $diff=getdate($aktdate-$gebdate);
        $alter=$diff[year]-1970;

        print "Alter: ".$alter;

        ?>

        -------

        Danke

        1. Hallo,

          Ich habe das mal ausprobiert, aber warum verechnet sich meine lösung um ein Jahr

          Vermutlich hast Du ein Geburtsjahr vor 1970 angegeben und meine Loesung basiert auf den Datums-/Zeitfunktionen, die ihre Basis auf den 01.01.1970 00:00:00 beziehen.

          ...
          $diff=getdate($aktdate-$gebdate);

          ^^^
          _Nach_ dieser Zeile mal aendern in:

          $gebjahr=intval(substr($gebTag,0,4));
          if($gebjahr<1970) $alter=$diff[year]-$gebjahr;
          else $alter=$diff[year]-1970;

          print "Alter: ".$alter;

          MfG, Thomas

          1. Ok habe ich gemacht
            http://mitglied.lycos.de/djwoelk3/djwoelk/geb1.php

            geht auch !!
            nur könnte man es irgendwie hinbekommen das sich das heutioge datum automatisch in $heute einträgt ?

            1. Hallo,

              nur könnte man es irgendwie hinbekommen das sich das heutioge datum automatisch in $heute einträgt ?

              $heute=date("Y-m-d",time());

              MfG, Thomas

        2. Hallo,

          $gebTag=$jahr.$monat.$tag;

          Diese Zeile sollte so lauten:
          $gebTag=$jahr."-".$monat."-".$tag;
          weil sonst die Stringzerlegung nicht klappt.

          MfG, Thomas

  3. Hi Gunnar,

    wie kann ich am einfachsten das Alter einer Person
    berechnen, wenn ich den Geburtstag und das heutige
    Datum habe.
    $gebTag = '1973-03-11';
    $heute  = '2002-07-28';

    eine einfache - und von externen Modulen unabhängige

    • Lösung könnte in diesem Falle (mit einem so schön
      string-sortierbaren Datumsformat) etwa so aussehen:

    1. Trenne beide Datumswerte in das Jahr und den Rest.
    2. Subtrahiere Geburtsjahr von aktuellem Jahr.
    3. Führe einen String-Vergleich auf den Rest durch:
       a) Ist dort der Wert von "heute" größer als der des
          Geburtsjahres, hast Du schon in 2. Dein Ergebnis,
       b) andernfalls mußt Du davon noch 1 abziehen.
    Schritt 3 prüft, ob der Geburtstag im aktuellen Jahr
    bereits war oder noch nicht.

    Viele Grüße
          Michael