Die Berechnung der Differenz zweier Daten in Jahren, Monaten und Tagen ist reine Arithmetik, einzig bei der Differenz der Tage kann die Anzahl der Tage des Vormonats eine Rolle spielen:
Code:
YYYY-mm-dd
- YYYY-mm-dd
------------
YYYY-mm-dd
Wie bei der Subtraktion, üblich fängt man rechts an und arbeitet sich schrittweise nach links vor, bis man alle "Stellen" abgearbeitet hat. Ebenso verfährt man wie bei der "normalen" arithmetischen Subtraktion, wenn die Stelle des Minuenden kleiner ist als die des Subtrahenden, in diesem Fall entnimmt man der nächsthöheren "Stelle" einen Zähler und ergänzt den Minuenden entsprechend. Die Besonderheit ist lediglich, daß die Differenz bei Tagen variieren kann, wenn der Minuend größer als der Subtrahend ist, da die Monate unterschiedlich lang sind, daher muß in diesem Fall die Anzahl der Tage des Vormonats ermittelt und mit diesem Wert gerechnet werden.
Gegeben sei das Geburtsdatum 1968-10-02:
Tag:
Code:
2007-01-20
- 1968-10-02
------------
18
Monat:
01 ist größer als 10, daher entnehmen wir dem Jahr des Minuenden 1 Jahr und ergänzen 01 um 12 Monate:
Code:
2006-13-20
- 1968-10-02
------------
03-18
Jahr:
Code:
2007-01-20
- 1968-10-02
------------
38-03-18
Meinereiner ist also heute 38 Jahre, 3 Monate und 18 Tage alt.
Nehmen wir mal ein Geburtsdatum, dessen Tag kleiner als 20 ist, z.B. 1982-05-28
Tag:
20 ist größer als 28, daher entnehmen wir dem Monat des Minuenden 1 Monat und ergänzen 20 um...
Da der Monat des Subtrahenden Mai ist, müssen wir die Anzahl der Tage im April ermitteln, um diesen Wert ergänzen wir die 20.
Code:
2007-00-50
- 1982-05-28
------------
22
Monat:
Nachdem wir vom Monat des Minuenden einen Zähler genommen haben, haben wir dort den Monat 0, daher müssen wir dem Jahr des Minuenden ebenfalls einen Zähler entnehmen und den Monat damit aufstocken:
Code:
2006-12-50
- 1982-05-28
------------
07-22
Jahr:
Code:
2006-12-50
- 1982-05-28
------------
24-07-22
Jemand der am 28. Mai 1982 geboren ist, ist heute 24 Jahre, 7 Monate und 22 Tage alt.
Wesentlich einfacher läßt sich die Anzahl der Tage seit der Geburt mit Hilfe von MySQL ermitteln, dieser kennt die Funktion DATEDIFF(date1, date2), die die Differenz der beiden Daten als Anzahl der Tage zurückliefert:
Code:
SELECT DATEDIFF(NOW(), '1968-10-02');
SELECT DATEDIFF(NOW(), '1982-05-28');
PHP selbst ist für solche Aufgaben nur unzureichend geeignet, da die meisten Datumsoperationen mit Unix-Timestamps arbeiten, je nach System fängt also die Zeitrechnung mit dem Unix-Epoch an und endet bereits 2035.
greetings, Keita
P.S.: Die obige Logik in PHP zu gießen dürfte hoffentlich nicht allzu schwer fallen, der simpelste Weg ist einfach stur von rechts nach links zu arbeiten und genau das in PHP zu formulieren, was man bei der Berechnung auch tatsächlich tut
