Datumsdifferenz geht nicht richtig?

sam

Erfahrenes Mitglied
Hallo PHP'ler,

Ich will eine Datumsdifferenz zw. einem Termin in der Zukunft
und dem jetzigen Timestamp berechnen und im Stil von eBay
ausgeben (z.B. noch 3T 20Std 3Min).
Leider scheint das nicht wirklich zu funktionieren...
1.) Geht um eine Stunde falsch (is klar, GMT + 1)
2.) Ist irgendwie ungenau...Ich will, dass der 2. Zeitpunkt immer
an dem Tag um 8 Uhr ist. Leider zeigt er mir um 17:30 Uhr
nicht 2Std 30Min an sondern was ganz anderes...
So falsch kann das hier doch nicht sein :rolleyes:

Funktion:
PHP:
<?php
function MakeDateDifference($time_b) {
$now = mktime();
$time_a = mktime(20,0,0,date("n",$now),date("j",$now),date("Y",$now));

$return = array();
$difference = $time_b - $time_a;
$return['days'] = floor($difference / (60 * 60 * 24));
$difference %= (60 * 60 * 24);
$return['hours'] = floor($difference / (60 * 60));
$difference %= (60 * 60);
$return['minutes'] = floor($difference / 60);
$return['seconds'] = $difference % 60;
return $return; 
}
?>
Ausgabe:
PHP:
<?php
$noch = MakeDateDifference($row["schluss"]);

if($noch["days"]!=""){
echo $noch["days"]."T ";
}
if($noch["hours"]!=""){
echo $noch["hours"]."Std ";
}
if($noch["minutes"]!=""){
if($noch["days"]=="" && $noch["hours"]==""){
echo "<span class=\"red\">".$noch["minutes"]."Min</span>";
}
else {
echo $noch["minutes"]."Min";
}
}
?>
Weiss einer Rat bzw. hat da eine fertige, gute Funktion
rumliegen? Wär nett ;)

mfg
sam
 
Aber wenn ich mktime() ohne Werte ausführe bekomme ich doch auch den aktuellen Timestamp...
 
Was mir gerade auffällt: Das mit der Zeitzone müsste doch
theoretisch egal sein...
Beide Daten wurden vom gleichen Server generiert...
Die Differenz bleibt also die gleiche.
Ist aber immer eine hartnäckige Stunde zu viel drin :rolleyes:
(mal abgesehen von den restlichen Werten, die auch
nicht wirklich so stimmen ;))
 
PHP:
$return = array();
$difference = $time_b - $time_a;
$return['days'] = floor($difference / (60 * 60 * 24));
$difference %= (60 * 60 * 24);
$return['hours'] = floor($difference / (60 * 60));
$difference %= (60 * 60);
$return['minutes'] = floor($difference / 60);
$return['seconds'] = $difference % 60;
return $return;
Also:

Du fängst mit den Tagen an. Dann setzt du die Differenz ($difference) auf die Tage (%=), dann dividierst du das mit (60 * 60). Das sind aber nicht die Stunden.

Lass einfach die %= Anweisungen weg.
 
Naja, kommt darauf an ob dein Server nicht irgendein Modul für Zeitzonen eingebaut hat. Oder du hast ein Problem mit Sommer- / Winterzeit.
 
Der Modulo-Operator (oder wie auch immer dieses tolle %
heisst) wird aber doch benötigt um den Rest auszurechnen.
Sonst habe ich ja 3 Tage, die 3 Tage in Minuten, die 3 Tage
in Sekunden, usw...
 
Zurück