Unterscheid zwischen einem Timestamp und dem aktuellen Timestamp in Minuten, Sekunden

CrushLog

Erfahrenes Mitglied
Hi,

ich hab mal wieder ein kleines Denkproblem, und komm nicht weiter, bzw finde keinen Ansatz um das Problem zu lösen.
Ich würde gerne den Unterschied zwischen einem aus einer DB ausgelesenen Timestamp und dem aktuellen Timestamp in Jahren, Wochen, Tagen, Stunden, Minuten, Sekunden ausgeben lassen. Weiss da jemand einen guten Ansatz, bzw eine gute Lösung?
Sprich der Timestamp Unterschied liegt bei 16790 Sekunden. Wieviel Stunden, Minuten usw wäre das also her?

Danke im Vorraus :]
 
Hi,

na ja, ich machs mal in Pseudocode, da ich keinen Fehler in der Syntax verbrechen will:
Code:
difference = stamp2 - stamp1;

days = parseInt(difference / (60 * 60 * 24));
difference -= (days * 60 * 60 * 24);
hours = parseInt(difference / (60 * 60));
difference -= (hours * 60 * 60);
minutes = parseInt(difference / 60);
difference -= (minutes * 60);
seconds = difference;
Mag natürlich sein, dass es in PHP schon vordefinierte Funktionen dafür gibt...

Gruß

P.S.: parseInt mag fehlerhaft sein: was Du brauchst, ist die Zahl ohne Nachkommastellen - ich weiß aber nicht, ob es in PHP so etwas wie Math.floor() gibt.
 
Re: Unterscheid zwischen einem Timestamp und dem aktuellen Timestamp in Minuten, Seku

PHP:
// Gehen wir mal davon aus, du hast die Differenz der zwei Timestamps
// in einer Variable mit dem Namen $diff
$fullHours = intval($diff/60/60); // Der ganzzahlige Anteil der Division durch 3600
// Die Gesamtanzahl der Minuten ($diff/60) minus der Minuten die schon für
// die vollen Stunden draufgegangen sind (60*$fullHours) sind die restlichen Minuten.
$Minutes = intval(($diff/60)-(60*$fullHours));
// Nun erstellst du noch einmal die Differenz zwischen der gesamten Differenz der zwei
// Timestamps ($diff) und den durch $fullHours und $Minutes in Anspruch genommenen
// Sekunden
$Seconds = $diff - $Minutes*60 - $fullHours*60;
// Ausgabe
echo "Die Differenz beträgt: ".$fullHours." Stunden, ".$Minutes." Minuten und ".$Seconds." Sekunden.";
Das ist zwar ungetestet, sollte aber auf Grund der mathematischen Problematik das Problem lösen. Wenns nicht geht, sollte es auch entsprechend selber zu debuggen sein.

Und wenn es doch wieder eine existente PHP-Funktion dafür gibt, lasse ich mich natürlich gerne belehren. ;)
 
Super, werd ich gleich mal ausprobieren, danke euch.

Aber ich hab da grad noch ein anderes Problem, soll ich dafür einen neuen Thread aufmachen?

//Edit Ok, hat sich erledigt :]
 
Re: Unterscheid zwischen einem Timestamp und dem aktuellen Timestamp in Minuten, Seku

Wieso so umständlich, tut's nicht auch date()? Immerhin ist doch die Funktion speziell dafür gemacht, aus nem Timestamp ein lesbares Datum zu machen, man muss halt nur einen Tag, einen Monat und 1970 Jahre abziehen.

Oder hab ich jetzt nen Denkfehler?
 
Ich möchte ja kein Datum rauskriegen, sondern den zeitlichen Unterschied der beiden Timestamps in Tagen, Stunden, Minuten und Sekunden. Das Ganze soll für ein Profil Visit System sein, so dass man ersehen kann, wann der User x welche Besucher auf seinem Profil hatte und wie lange das ganze her ist.
 
Re: Unterscheid zwischen einem Timestamp und dem aktuellen Timestamp in Minuten, Seku

Ich meine das so:

PHP:
<?php
	$diff = $timestamp1 - $timestamp2;
	
	$jahre = date('Y',$diff) - 1970;
	$tage = date('z',$diff); // 'z' => Tag eines Jahres 0-365
	$stunden = date('G',$diff);
	$minuten = date('i',$diff);
	$sekunden = date('s',$diff);
?>
 
Das geht auch, danke :] ist aber um 1 Stunde falsch. Wenn die Differenz 1 Minute beträgt wird 1 Stunde, 1 Minute usw ausgegeben.
 
Re: Unterscheid zwischen einem Timestamp und dem aktuellen Timestamp in Minuten, Seku

Zwei Dinge:

1. Wieso sollte das um eine Stunde abweichen? Wenn die Differenz 60 Sekunden beträgt, dann ergibt das ne Unix-Zeit von Tag 0 in 1970 um 00:01:00 Uhr, oder stimmt das nicht?

2. Die Lösung hinkt trotzdem etwas. Es kann Schaltjahr-Probleme geben, wenn z.B. die Differenz zwischen 365 und 366 Tagen liegt. Deshalb ist es besser, die einzelnen Timestamps erst mit date() zu zerlegen und die Ergebnisse zu subtrahieren und damit ist date() wohl doch aufwendiger als selbst zu rechnen.

Sorry, war nur ne Idee.
 

Neue Beiträge

Zurück