phpbar.de logo

Mailinglisten-Archive

[php] Umrechnen von Zeiten

[php] Umrechnen von Zeiten

Niels Jäckel niels.jaeckel at silice.de
Mon Sep 17 10:47:14 CEST 2007


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