PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Timestamp / PHP


Evalley
2006-04-12, 13:00:44
Hallo zusammen,
ich hab ein kleines Problem mit einer Zeitberechnung. Habe zwei Timestamps
in der DB stehen. Einen Start einen End Zeitpunkt. Nun möchte ich die Dauer zwischen den zwei Zeitpunkten errechnen. Habe mir gedacht, dass ich ja einfach die zwei Timestamps von einander abziehen kann und anschließend mit getdate() an die Stunden/Minuten/Sekunden komme. Funktioniert auch soweit ganz gut. Nur habe ich ein Problem mit den Stunden. Liegen die Zeitpunkte nur ein paar Sekunden aus einander, so werden die Sekunden richtig angezeigt. Aber auch immer noch eine Stunde. Woran liegt das??


.............................
$diff=getdate($result['Ende']-$result['Start']);
$dauer = $diff['hours'].":".$diff['minutes'].":".$diff['seconds'];
.............................

Kinman
2006-04-12, 13:40:19
Ich weiß nicht wie dein Timestamp ist, aber am leichtesten ist es, wenn du beide Zeiten in die Unix Zeitform bringst (Sek nach igendwann 1970 oder so) und dann die Differenz ausrechnest. Anschließend wandelst die differen (Sekunden) wieder in Stunden, Minuten und Sekunden um.

mfg Kinman

Evalley
2006-04-12, 13:44:36
erledigt

Sephiroth
2006-04-12, 14:37:55
Hallo zusammen,
ich hab ein kleines Problem mit einer Zeitberechnung. Habe zwei Timestamps
in der DB stehen. Einen Start einen End Zeitpunkt. Nun möchte ich die Dauer zwischen den zwei Zeitpunkten errechnen. Habe mir gedacht, dass ich ja einfach die zwei Timestamps von einander abziehen kann und anschließend mit getdate() an die Stunden/Minuten/Sekunden komme. Funktioniert auch soweit ganz gut. Nur habe ich ein Problem mit den Stunden. Liegen die Zeitpunkte nur ein paar Sekunden aus einander, so werden die Sekunden richtig angezeigt. Aber auch immer noch eine Stunde. Woran liegt das??


.............................
$diff=getdate($result['Ende']-$result['Start']);
$dauer = $diff['hours'].":".$diff['minutes'].":".$diff['seconds'];
.............................

getdate() liefert dir das Datum zu dem angegebenen timestamp (gegeben in Sekunden seit dem 1.1.1970) zurück.
Damit kannst du wohl schlecht eine Zeitdifferenz angeben.

Entweder rechnest du es anhand der Sekunden selbst aus wieviel Zeit vergangen ist (deine timestamps sind ja in UNIX-Time angegeben) oder du verwendest z. B. die Duration Klasse von http://aidan.dotgeek.org/repos/?file=Duration.php

Kinman
2006-04-14, 00:13:57
getdate() liefert dir das Datum zu dem angegebenen timestamp (gegeben in Sekunden seit dem 1.1.1970) zurück.
Damit kannst du wohl schlecht eine Zeitdifferenz angeben.


Warum? Sollte doch ganz normal Funktionieren..
2 Stunden nach 1.1.1970 ist die Zeit 7200
3 Stunden danach ist die Zeit 10800
abs(7200-10800) = 3600 -> das ganze wieder verwandelt macht daraus 1 Stunde Differenz. Obendrein kann man damit auch noch super andere Daten errechen.
z.B. wenn ich 1 Tag vorher haben will -> Unix Timestamp - 24*3600 -> Wieder umwandeln ergibt eben einen Tag vorher, egal ob es sich beim urpsünglichen Datum um den 1.1.2006 oder dem 13.04.2006 handelt.

mfg Kinman

Sephiroth
2006-04-14, 14:35:37
Warum? Sollte doch ganz normal Funktionieren..
2 Stunden nach 1.1.1970 ist die Zeit 7200
3 Stunden danach ist die Zeit 10800
abs(7200-10800) = 3600 -> das ganze wieder verwandelt macht daraus 1 Stunde Differenz. Obendrein kann man damit auch noch super andere Daten errechen.
z.B. wenn ich 1 Tag vorher haben will -> Unix Timestamp - 24*3600 -> Wieder umwandeln ergibt eben einen Tag vorher, egal ob es sich beim urpsünglichen Datum um den 1.1.2006 oder dem 13.04.2006 handelt.

mfg Kinman
Das was du da machst ist ja die Differenz über die Sekunden ausrechnen.
getdate() liefert dir aber das zu der Zahl gehörige Datum. Seit wann ist ein Datum eine Zeitdifferenz?

Kinman
2006-04-14, 14:56:06
Ich kann mittels den PHP Datumsfuktionen den Timestamp der Datenbank in Sekunden nach 1.1.1970 ausrechen, oder?
Wenn ich das für beide Timestamps mache kann ich somit die Differenz zwischen den Timestamps (in Sekunden berechnen).
Anschließend kann ich die Sekunden wieder in ein Datum umwandeln -> Statt xxxxx Sekuden halt xx Tage, xx Stunden, xx Minuten und xx Sekunden
Das ist ja das, was der Threadstarter will, oder? Die Differenz zwischen zwei Timestamps. Egal ob die Jetzt in Sekunden oder als Datum angegeben ist.

Was ich oben noch erläutert habe, ist das man bei dieser Rechenmethode eben noch andere Dinge machen kann, wie z.B. eine Differenz zu einem Datum dazuzählen / abziehen und das ganze anschließend wieder in ein richtiges Datum umwandeln, ohne das man sich um Monats / Jahreswechsel kümmern muss.

mfg Kinman

EDIT: Ach ja, das hätte ich oben erwähnen sollen: Mein Post bezieht sich nicht aus getDate, sondern eben auf den Timestamp, sry ;)

Sephiroth
2006-04-14, 17:11:01
gut, wir sind uns schonma einig das der ursprüngliche Code so nicht geht. ;)
Denn sei die Differenz mal genau 1 Tag.
getdate(86400) -> 2.1.1970 00:00:00 Uhr
aha, hm, differenz von 0 stunden nach seinem ursprünglichen code

Was ginge und von dem ich glaube das du das wohl so meinst wäre, wenn man den 1.1.1970 0:0:0 Uhr als Referenzzeitpunkt nimmt. Dann kann man auf folgende Weise mit getdate auch eine Dauer angeben.
$date = getdate($diff);
$dauer = $date['year']-1970 . " Jahr(e) " . $date['yday']-1 . " Tag(e) ". $date['hours'] . " Stunde(n) " . $date['minutes'] . " Minute(n) " . $date['seconds'] . " Sekunde(n)";
Sicher die einfachste Methode, wenngleich nicht die Beste - meiner Meinung nach.