PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Countdown zählt falsch (?)



WuTScH
17-03-2004, 19:33
Hallihallo ihr alle,

Nach längerem Mitlesen und nachdem ich mit Linux nun endlich arbeiten kann, habe ich mich mal hier angemeldet :D

Und ich hab auch schon eine erste Frage:
Ich habe einen einfachen Counter in PHP geschrieben, der die Zeit bis zu den Osterferien ausgeben soll.
Leider zeigt er mir immer einen Monat zuviel an, und ich find den Fehler nicht :(

Hier mal der Code:


<?
$t_target = mktime(0,0,0,4,5,2004);
$t_actual = time();
$t_diff = $t_target - $t_actual;

$a_day = date("d",$t_diff);
$a_month = date("m",$t_diff);
$a_year = date("Y",$t_diff);

$a_hour = date("H",$t_diff);
$a_minute = date("i",$t_diff);

echo "Noch<br />";
echo $a_month." Monate<br />";
echo $a_day." Tage<br />";
echo $a_hour." Stunden<br />";
echo $a_minute." Minuten<br />";
echo "bis zu den Osterferien!";
?>


Das ergebnis ist dann ein

Noch
01 Monate
19 Tage
03 Stunden
30 Minuten
bis zu den Osterferien!

Wäre schön, wenn da jemand eine Lösung zu wüsste :)

mfg
WuTScH

quinte17
17-03-2004, 21:02
tja ;) vielleicht kommst du da ja selbst ein bisschen drauf warum des nicht gehen kann :P tu mal ein:
echo date("Y-m-d H:i",$t_diff);
in dein script rein... dann wirst du gleich sehen warum es so nciht gehen kann...
wenn du dann noch fragen hast nur zu ;)

will dir nur nen kleinen wink geben ^^

greetz

WuTScH
17-03-2004, 21:46
ok, ich verstehe das problem - meinen denkfehler - nun klar und deutlich :D

und ich habs geschafft *froi**stolzsei* :D

Für nachfolgende Generationen:



<?
$t_target = mktime(0,0,0,4,5,2004);
$t_actual = time();
$t_diff = $t_target - $t_actual;

$a_month = ($t_diff - ($t_diff % 2592000)) / 2592000;
$t_diff = $t_diff - ($a_month * 2592000);
$a_day = ($t_diff - ($t_diff % 86400)) / 86400;
$t_diff = $t_diff - ($a_day * 86400);
$a_hour = ($t_diff - ($t_diff % 3600)) / 3600;
$t_diff = $t_diff - ($a_hour * 3600);
$a_minute = ($t_diff - ($t_diff % 60)) / 60;
$t_diff = $t_diff - ($a_minute * 60);
$a_second = ($t_diff - ($t_diff % 1)) / 1;

echo "Noch<br />";
echo $a_month." Monate<br />";
echo $a_day." Tage<br />";
echo $a_hour." Stunden<br />";
echo $a_minute." Minuten<br />";
echo "bis zu den Osterferien!";
?>


Herzlichen Dank für deine Hilfe :)

mfg
WuTScH

sixfriends
18-03-2004, 01:20
Nur so als Anmerkung:
Wie wäre statt

$a_month = ($t_diff - ($t_diff % 2592000)) / 2592000;
einfach ein

$a_month = (int)($t_diff / 2592000);

quinte17
18-03-2004, 09:29
wenn du direkt teilst ohne den rest vorher abzuziehen, dann kann das zu rundungsfehlern führen...

greetz

sixfriends
18-03-2004, 17:02
@quinte: In dem Fall willst du ja auch nicht runden, sondern nur den Ganzzahlanteil der Zahl. (Wenn ich vorher den Rest abziehe passiert das Gleiche)

Da ein TypeCast nach int ebenfalls den Nachkommaanteil einer Zahl abschneidet, wäre das auf jeden Fall meine erste Wahl, weil effizienter.

Falls du auf die Rechnung selbst anspielst: Auch php kennt Gleitkommazahlen :p