Mailinglisten-Archive |
Hallo in die Runde, da man bei Zeitberechnungen immer auf Schaltjahre und auch Sommer- und Winterzeit achten muss ist es ratsam grundsätzlich mit strtotime() zu arbeiten, da diese Funktion alles automatisch beachtet. Es ist zwar sicherlich langsamer damit zu arbeiten, als solche Dinge explizit zu berechnen, jedoch kann man sich auf die Ergebnisse verlassen. Zu obigem Problem hier mein (PHP-seitiger) Lösungsvorschlag: function timeDiff($iFrom, $iTo) { // check precondition if ($iFrom > $iTo) { /* throw some exception */ } // get years for ($iYears = 0;; $iYears++) { $iNewTo = strtotime('-1 year', $iTo); if ($iNewTo < $iFrom) break; $iTo = $iNewTo; } // get months for ($iMonths = 0;; $iMonths++) { $iNewTo = strtotime('-1 month', $iTo); if ($iNewTo < $iFrom) break; $iTo = $iNewTo; } return array('years' => $iYears, 'months' => $iMonths); } Diese Funktion ist übersichtlich, man sieht was da passiert und ist leicht erweiterbar (z.B. für Wochen oder Tage). Folgendes Testskript: date_default_timezone_set('Europe/Berlin'); print_r(timeDiff( strtotime('1989-11-9') , time() )); print_r(timeDiff( strtotime('2002-9-11') , time() )); print_r(timeDiff( strtotime('-1 year') , time() )); print_r(timeDiff( time() , time() )); erzeugt ungefähr folgende Ausgabe: Array ( [years] => 17 [months] => 10 ) Array ( [years] => 5 [months] => 0 ) Array ( [years] => 1 [months] => 0 ) Array ( [years] => 0 [months] => 0 ) Vielleicht nützt es ja jemandem etwas ;-) Grüße, Niels
php::bar PHP Wiki - Listenarchive