phpbar.de logo

Mailinglisten-Archive

Re: alter aus geburtsdatum?
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: alter aus geburtsdatum?



Markus Rietzler schrieb am Samstag, den 10. Juli 1999:
> wie kann ich aus einem gegebenen geburtsdatum das alter einer person
> berechnen.

Das kommt jetzt ganz darauf an, wie Du dieses Alter willst: in Jahren,
in Monaten, Tagen oder Sekunden?

Nehmen wir mal an, das Geburtsdatum geb stammt aus einer Tabelle und
ist vom Feldtyp DATE.

WICHTIG:  Alle Formeln, die Unix-Timestamps benutzen, funktionieren
          nur mit Daten >= 1.1.1970 richtig.
          Also besser auf Unix-Timestamps verzichten, wenn möglich!

Nicht ganz so wichtig:
          Auch die Funktionen TO_DAYS und FROM_DAYS haben Grenzen,
          nämlich den Anfangspunkt des gregorianischen Kalenders 1582.
          Daten davor lassen sich mit diesen Funktionen nicht
          handhaben.

* Alter in Sekunden:

  # Daten >=1.1.1970!
  SELECT UNIX_TIMESTAMP()-UNIX_TIMESTAMP('1969-05-06') AS Alter_in_s FROM ...

* Alter in Stunden ("HH:MM:SS"):

  # Daten >=1.1.1970!
  SELECT SEC_TO_TIME(
                      UNIX_TIMESTAMP()-UNIX_TIMESTAMP('1969-05-06')
                    ) AS Alter_in_h FROM ...

* Alter in Tagen:

  SELECT TO_DAYS(CURRENT_DATE)-TO_DAYS('1969-05-06') AS Alter_in_T;

  Achtung: Die Funktion FROM_DAYS ist nicht dafür geeignet, um diese
           Alter in Tagen in ein Datum der Form YYYY-MM-DD
           umzurechnen, da es ein Datum vor 1582 wäre.  Auch wenn es
           evtl. funktioniert, warnt das MySQL-Handbuch davor!

* Alter in Monaten:

  (Auch hier besser nicht mit Tagen rechnen, weil Monate ja nicht gleich
   lang sind.)

  SELECT PERIOD_DIFF(
                      DATE_FORMAT(CURRENT_DATE,'%Y%m')
                     ,DATE_FORMAT('1969-05-06','%Y%m')
                    ) AS Alter_in_M;
 
* Alter in Jahren:
 
  # Als Kommazahl.
  SELECT PERIOD_DIFF(
                      DATE_FORMAT(CURRENT_DATE,'%Y%m')
                     ,DATE_FORMAT('1969-05-06','%Y%m')
                    ) / 12 AS Alter_in_J;
 
  # Als ganze Zahl
  SELECT FLOOR( PERIOD_DIFF(
                             DATE_FORMAT(CURRENT_DATE,'%Y%m')
                            ,DATE_FORMAT('1969-05-06','%Y%m')
                           ) / 12
              ) AS Alter_in_J;

Diese letzten beiden Versionen sind in meinen Augen die besten.

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://home.pages.de/~ramsch/ >
PGP KeyID=0xE8EF4F75 FiPr=52 44 5E F3 B0 B1 38 26  E4 EC 80 58 7B 31 3A D7

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive