Hallo,
Ich nutze Timestamps um einen Punkt zu speichern, an dem eine Datei auf eine bestimmte Art bearbeitet wurde - bzw. eine bestimmte Funktion ausgeführt wurde.
das ist gut.
Da es erforderlich ist, zu wissen, wieviel Zeit seit diesem Zeitpunkt vergangen ist ...
Für wen ist das erforderlich? Für irgendein Stück Programm? Dann genügt es doch, einfach die Differenz der beiden Timestamps in Sekunden zu nehmen. Das ist eine Größe, mit der man wunderbar rechnen kann, wenn das nötig sein sollte.
Oder für den User? Da würde ich -nur aus meiner eigenen Sicht- sagen, dass ich eine Angabe wie
"Dieser Beitrag wurde zuletzt am **.**.** um **:** Uhr geändert"
wesentlich informativer finde als
"Dieser Beitrag wurde zuletzt vor ** Tagen, ** Stunden und ** Minuten geändert".
date("s", (time() - $starttime)) //für Sekunden. Dasselbe mit "i", "H", "d", "m" und "Y"
Und das ist ein Problem. Denn date() ist nunmal dafür gedacht, einen Timestamp (also einen Zeitpunkt) in ein "lesbares" Datum umzuwandeln. Du bildest nun aber die Differenz zweier Timestamps, das ergibt einen sehr kleinen Wert, und date() interpretiert diesen kleinen Wert nun als Datum kurz nach dem 01.01.1970 (Timestamp=0).
Angezeigt wird auch alles richtig, nur mit dem Problem, dass alle Werte (sofern nicht wirklich "01") 01 anzeigen.
Das mit der führenden Null bekommst du leicht weg, indem du die Strings, die date() liefert, wieder in Zahlenwerte umwandelst. Dass du bei einigen Werten 1 anstatt 0 herausbekommst, liegt aber einfach daran, dass wir die Monate und Tage mit 1 beginnend zählen, die Stunden, Minuten und Sekunden dagegen ordentlich ab 0. Subtrahiere also 1 vom Monats- und Tageswert, und 1970 vom Jahr.
Bei längeren Zeiträumen als 1 Jahr kommt eventuell noch das von Deus Figendi angesprochene Schaltjahr-Problem dazu, bei Zeiträumen von einigen Monaten könntest du immerhin schon einen Fehler von einer Stunde durch die Sommer/Winterzeitgeschichte bekommen: Vom 27.03.2009, 08:00h bis zum 31.01.2009, 08:00h sind es zweifellos 4 Tage - aber sind das auch 96 Stunden? Oder 95? Oder doch 97?
So long,
Martin
Bitte komme jemand mit einem *g* zum Wochenende, damit nicht über mich gelacht wird.
(Gunnar Bittersmann)