Vinzenz Mai: Zeitunterschied

Beitrag lesen

Hallo

Sagen wir mal ich hab ein Datum im YYYY-MM-DD - Format. Jetzt möchte ich gern überprüfen, ob seitdem ein gewisser Zeitraum vergangen ist - 12 Monate z.B.

Ich hatte folgenden Ansatz:

$datum="2007-07-14";

$unterschied = mktime(date("Y-m-d")) - mktime($datum);

ich persönlich halte es für eine dschlechte Idee, Tages-, Monats- oder Jahrdifferenzen über UNIX-Timestamps zu berechnen, wenn die Ausgangsdaten in einem tagesgenauen Format vorliegen.

Jetzt hab ich nen Unterschied, aber scheinbar nicht den richtigen - der berücksichtigt nämlich nicht die Monate bzw. Tage.

Und wenn ich den richtigen hab, wie wandel ich das ganze in Monate um?

Gar nicht, das ist viel zu kompliziert. Du musst berücksichtigen, das Monate unterschiedlich viele Tage haben und ein bestimmter Monat noch dazu unterschiedlich viele Tage, je nachdem, was für ein Jahr gerade ist.

Vorschlag:
Differenz in Tagen:
Verwende die Differenz des Julianischen Tages, siehe Kalender-Funktionen, speziell
cal_to_jd().

Differenz in ganzen Jahren:

Differenz = Differenz der Jahresanteile
Wenn der Monats- und Taganteil des neueren Datums kleiner ist als der des alten
    Differenz = Differenz - 1
Ende Wenn

Differenz in Monaten:
Differenz der Monate = (Monat neueres Datum + 12 - Monat älteres Datum) modulo 12
Wenn Taganteil des neueren Datums kleiner ist als der des alten
    Differenz der Monate = Differenz der Monate - 1
Ende Wenn
Differenz = Differenz in ganzen Jahren * 12 + Differenz der Monate

Beispiele:
2007-06-14 und 2000-12-03

Differenz in Jahren:
Differenz = 7 (2007 - 2000)
Da 06-14 kleiner ist als 12-03
Differenz = 6 (7-1)

Differenz in Monaten:
Berechne Differenz der Monate
(6 + 12 - 12) % 12 = 6
Da 14 größer ist als 03 bleibt es bei 6
=> Differenz = 6 + 12 * 6 = 78 Monate

Damit erledigen sich alle Probleme mit der unterschiedlichen Monatslänge und auch der Sommerzeit.

Freundliche Grüße

Vinzenz