Magda: MySQL DATETIME Geburtsdatum, wie alt jetzt?

Hallo.

Das feld "birthday"  ist ein DATETIME Feld,
und enthält das Geburtsdatum der Mitglieder.

Mitglied "Franz" ist geboren am:   1978-06-03 09:32:12

Wie kann ich MySQL ausgeben lassen,
wieviel Jahre Franz heute alt ist?

Bisher hab ich in  http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
gesucht aber keine Lösung gefunden.

Dankesehr!
Eure Magda

  1. Hallo Magda,

    Du könntest mit (TO_DAYS(NOW())-TO_DAYS(birthday))/365 die Differenz zwischen jetzt und dem Geburtsdatum in Tagen errechnen - wenn Deine MySQL-Version es hergibt, auch mit DATEDIFF(). Dann mußt Du  noch die Nachkommastellen der Division loswerden, vielleicht durch Abschneiden (FLOOR()) oder eine Typekonversion (CAST()) in der Query, vielleicht auch erst im weiteren Ablauf Deines Skriptes oder bei der Ausgabe.

    Der Ansatz mit TO_DAYS() birgt kleine Probleme bei Geburtsdaten, die vor der gregorianischen Kalenderreform liegen.

    hth Robert

    1. hi,

      Der Ansatz mit TO_DAYS() birgt kleine Probleme bei Geburtsdaten, die vor der gregorianischen Kalenderreform liegen.

      witzbold - so jemand hat jetzt kein bestimmtes alter mehr, sondern der ist einfach tot.

      viel eher probleme wirst du damit kriegen, dass nicht jedes jahr 365 tage zählt.

      da wirst du die leute u.u. schon einen oder mehrere tage vor ihrem geburtstag für ein jahr älter erklären - zumindest mit den frauen dürftest du dir da auf jeden fall ärger einhandeln ;-)

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Habe ich das jetzt irgendwie falsch verstanden oder wieso speichert er nicht das geburtsdatum des users als timestring in der datenbank und rechnet es dann bei der ausgabe um (bzw sucht in der DB bei einer gezielten abfrage nach usern mit dem geb date BETWEEN '1000000' AND '2000000')...?

        ciao

      2. Hi,

        Der Ansatz mit TO_DAYS() birgt kleine Probleme bei Geburtsdaten, die vor der gregorianischen Kalenderreform liegen.
        witzbold - so jemand hat jetzt kein bestimmtes alter mehr, sondern der ist einfach tot.

        Und? Zum Beispiel feiert man vielleicht am 26. April den 1884. Geburtstag von Marcus Aurelius - Magda machte keinerlei Angaben dazu, in welcher Weise ihr System aufgebaut ist und genutzt wird.

        viel eher probleme wirst du damit kriegen, dass nicht jedes jahr 365 tage zählt.

        Ja, wohl wahr. Ich hatte dazu auch eine Anmerkung machen wollen, war heute morgen noch zu unausgeschlafen... Dazu führt jemand in den Diskussionen zu den Datums- und Zeitfunktionen auf mysql.org einen etwas komplexeren Ausdruck auf:

        IF((YEAR(date2) - YEAR(date1)) > 0, (YEAR(date2) - YEAR(date1)) - (MID(date2, 6, 5) < MID(date1, 6, 5)), IF((YEAR(date2) - YEAR(date1)) < 0, (YEAR(date2) - YEAR(date1)) + (MID(date1, 6, 5) < MID(date2, 6, 5)), (YEAR(date2) - YEAR(date1))))

        Ich bin auch jetzt noch zu unausgeschlafen, um das auf Fehlerfreiheit zu prüfen; ich muß eh' gleich wieder weg. Vielleicht hast Du ja gerade Zeit?

        hth Robert

  2. yo,

    Das feld "birthday"  ist ein DATETIME Feld,
    und enthält das Geburtsdatum der Mitglieder.

    warum den bitte datetime und nicht einfach nur das date ? oder muss man bei der angabe seines geburtstages auch die zeit der geburt angeben ?

    Ilja

  3. Hallo,

    unter  http://dev.mysql.com/doc/mysql/de/date-calculations.html steht im MySQL-Manual etwas dazu.

    Viele Grüße

    Thomas