Mailinglisten-Archive |
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
php::bar PHP Wiki - Listenarchive