PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Countdown


Luuser
15.11.2002, 22:26:29
Hallo Leute,
Kann mir jemand helfen?
Ich suche Händeringend hilfe.
Ich möchte gerne einen Countdown in php machen, aber mir fehlt anscheinend die Logik dafür. Kann mir jemand sagen wo ich ein Tutorial finde oder kann mir sogar jemand von eich helfen.

doudie
16.11.2002, 01:49:14
wie countdown ?!

nach Tagen ?! oder nach Sekunden?!


mit: <? flusch(); sleep(2); ?>
machst Du z.B. ne 2 Secunden-Pause, also dann so:
<?
echo "<br>10"; flusch(); sleep(2);
echo "<br>9"; flusch(); sleep(2);
echo "<br>8"; flusch(); sleep(2);
... usw...
?>

bei Tagen könnte es so gehen:
(Beachte: Monat vor Tag!)

<?
$ende=("12/31/2002");
$testende = strtotime ($ende);
$nowdate = time();
$rest=($testende - $nowdate);
echo "<br>". $rest ;
?>

$rest = Anzahl der Sekunden von jetzt bis $ende
kannst Du ja noch umrechnen mit z.B.:
$tage=($rest/(12*3600));

echo "<br> es sind noch ". $tage ."Tage";

CyberAge
16.11.2002, 07:58:41
naja doudi, netter ansatz, aber ich glaube luuser möchte auch, dass sich der countdown alleine ändert. das kannst du nur über JS erreichen, da PHP den quelltext erst parst und dann an den browser sendet. die sache mit flush() funzt auch nicht so wie die soll, und ich würde davon abraten. Was du machen kannst ist mit PHP die aktuelle Zeit ermitteln und dann mit JS den countdown anzeigen lassen. Wie das in JS geht weiß ich allerdings nicht.

Gweilo
16.11.2002, 10:48:24
geh mal auf javascript.internet.com da gibts bestimmt noch Y2k countdowns, die du abändern kannst

doudie
16.11.2002, 11:33:31
naja, war halt so ne Idee .... JS ist da schon besser!
... aber kann man doch mit einer Scleife machen, oder wie meinst Du das mit automatisch?

so in der Art ...
<?
$countzeit = 10;
$nowdate = time();
$ende=($nowdate+$countzeit);
$testende = strtotime ($ende);
for ($x=0;$x<=$countzeit; x++)
{
$rundate = time();
$rest=($testende - $rundate);
echo "<br>". $rest ;
}
?>

ja JavaScript ist die bessere Lösung, hier wird der Countdown-Zähler je in einer ´neuen Zeile angezeigt..... mit echo "<br>". $rest ; und mit JS kannst Du ja auch document.write oder so nutzen!

Luuser
16.11.2002, 14:34:43
für die schnellen antworten.

Ich werde mich wohl mal mit JS auseinander setzen müssen.

Dieser Countown soll in ungefähr so aussehen: Bsp. Das Spiel XXX ist in 12Stunden 25min 14s erhältlich. So ungefähr soll das aussehen

doudie
23.11.2002, 20:43:13
das geht ganz gut mit PHP, Du musst nur die ersten zwei Variablen anpassen uns unten sind nochmal die Links zu den Befehlen..... Viel Erfolg!


<?

$zielzeit = "12/31/2002";
$game = "Name des Spiels";

$nowzeit = time();
$vglzeit = strtotime ($zielzeit);
$difzeit = ($vglzeit-$nowzeit);

$jahre = strftime ("%Y",$difzeit);
$monate = strftime ("%m",$difzeit);
$tage = strftime ("%d"",$difzeit);

$stu = strftime ("%Z",$difzeit);
$min = strftime ("%M",$difzeit);
$sec = strftime ("%S",$difzeit);

echo "<br>Das Spiel $game ist in
<br>$jahre Jahren
<br>$monate Monaten
<br>$tage Tagen
<br>$stu Stunden
<br>$min Minuten
<br>$sec Sekunden erhältlich.";
?>


siehe hier: http://www.selfphp.com/funktionsreferenz/datums_und_zeit_funktionen/strftime.php

und hier: http://www.selfphp.com/funktionsreferenz/datums_und_zeit_funktionen/strtotime.php

doudie
05.12.2002, 15:11:10
war falsch !

hier der richtige Code:

<?

$zielzeit = "12/31/2002";
$game = "Name des Spiels";

$nowzeit = time();
$vglzeit = (strtotime ($zielzeit));
$difzeit = ($vglzeit-$nowzeit);

$jahre = number_format($difzeit/(3600*24*365),2,",",".");
$monate = number_format($difzeit/(3600*24*30),2,",",".");
$tage = number_format($difzeit/(3600*24),2,",",".");

$stu = number_format($difzeit/3600,2,",",".");
$min = number_format($difzeit/60,2,",",".");
$sec = number_format($difzeit,2,",",".");

echo "<br>Das Spiel $game ist in
<br>$jahre Jahren
<br>$monate Monaten
<br>$tage Tagen
<br>$stu Stunden
<br>$min Minuten
<br>$sec Sekunden erhältlich.";
?>

hab ich getestet, bei mir ging der Script.
Du kannst Die Ausgabe auch noch anders formatieren mit

number_format(Variable,Stellen,Stellentrenner,Tausendertrenner)
also aus 84357,48745 wird 84.357,48

Blue7
08.12.2004, 21:19:04
Toll sowas suche ich auch, aber ich hatte sowas mal ihn HTML aber die Fehlererkennung von Firefox bremst das heftigst bei langsameren Rechnern.

Hier mal ein Auszug.
Kann mir jemand helfen den Fehler zu umgehen?

oder besser dieses in PHP wiederzugeben.

Klappt aber irgendwie nie richtig, Ausgabe teils falsch (PHP)

<?php
require "Datenbankzugriffsdatei";
$dbserv=mysql_connect ($dbhost, $dbuser, $dbpasswd) or die ("Keine Verbindung zum Server");
$dbdata=mysql_select_db ($dbname) or die ("Keine Verbindung zur Datenbank");

$ergebnis = mysql_query ("SELECT * FROM x order by date asc limit 0,1") or die ("DB-Error | Bitte kontaktieren Sie einen Mitarbeiter");

while($row = mysql_fetch_array($ergebnis))
{

$now = date("Y-m-d H:i"); // Jetzige Zeit
$time = time(); // Time
$timezone=3600*2; // Zeitzone
$timestamp = gmdate('H:i', $time+$timezone); // Jetzige Zeit
$date=$row['date']; // Datum kommt raus (2005-01-11 13:00:00)
$title=$row['id_bez']; // Episodentitel raus

$string_date = substr("$date", 0, -9); // Ausstrahlungsdatum
$string_strtotime = (strtotime ($string_date)); // UNIX Zeit
$string_remain = ($string_strtotime-$time); // UNIX-Zeit - Jetzige

$tage = number_format($string_remain/86400,0,",",".");
$string_remain %= 86400;
$std = number_format($string_remain/3600,0,",",".");
$string_remain %= 3600;
$min = number_format($string_remain/60,0,",",".");
$string_remain %= 60;
$sec = number_format($string_remain,0,",",".");

echo "timezone: $timezone<br>";
echo "time: $time<br>";
echo "timestmap; $timestamp<br>";
echo "now: $now<br>";
echo "date: $string_date<br>";
echo "strt: $string_strtotime<br>";
echo "rema: $string_remain<br>";
echo "Die Episode $title startet in $tage Tagen $std Stunden $min Minuten $sec Sekunden";

Naja und hier der HTML Teil
Aufruf in der HTML Seite

<body onLoad=" startTimer()">
<script language="JavaScript" src="countdown.js"></script>
<table class=black align="center" border="0">
<tr>
<td align=center colspan="3">
<b><font face="Verdana" size="1" color="green" id="left"></font></b>
<div id="event"></div>
</td>
</tr>
</table>
</body>

Naja und hier die countdown.js
var dates=new Array();
var events=new Array();
var current;
dates[0]=new Date("jan 11, 2005 16:07:00");
events[0]="<img src="http://xxxxx.jpg"><br><br><font face=Verdana size=1 color=green><b>XxXX: <a href=xxxxx target=_blank>XXXXXXXXX</a></b><br>XX, 11.01.2005 | 15:00 Uhr<br><br></font><font face=Verdana size=2>auf<br>XXXX</font>";
dates[1]=new Date("dec 31, 2005 23:59:59");
events[1]="<img src="http://xxxxx.jpg"><br><br><font face=Verdana size=1 color=green><b><font face=Verdana size=1 color=green><b>Vorerst keine weitere Ausstrahlung bekannt!</b></font>";

function selectDate()
{
now=new Date()
for (i=0;i<dates.length;i++)
{
if (now.getTime()<dates[i].getTime())
{
current=dates[i];
document.all.event.innerHTML=events[i];
return;
}
}
}

function startTimer()
{
selectDate();
}

function timeRemaining()
{
now = new Date();
var secsLeft = Math.floor((current.getTime()-now.getTime())/1000);
if (secsLeft<0)
{
startTimer();
}
else
{
daysLeft = Math.floor(secsLeft / 86400);
secsLeft %= 86400;
hoursLeft = Math.floor(secsLeft / 3600);
secsLeft %= 3600;
minsLeft = Math.floor(secsLeft / 60);
secsLeft %= 60;


document.all.left.innerHTML=daysLeft+"Tage "+hoursLeft+"h "+minsLeft+"min "+secsLeft+"s";


if(daysLeft<1)
{
document.all.left.innerHTML=hoursLeft+"h "+minsLeft+"min "+secsLeft+"s";
}

if(hoursLeft<1)
{
document.all.left.innerHTML=minsLeft+"min "+secsLeft+"s";
}

if(minsLeft<1)
{
document.all.left.innerHTML=secsLeft+"s";
}
setTimeout("timeRemaining()", 800);
}
}

Hier die Fehlermeldung in Firefox

Warnung: Die nicht standardgemäße Eigenschaft document.all wurde verwendet. Verwenden Sie stattdessen den W3C-Standard document.getElementById().
Quelldatei: file:///C:/Temp/countdown.js
Zeile: 17

xabbuh
09.12.2004, 19:40:34
Warnung: Die nicht standardgemäße Eigenschaft document.all wurde verwendet. Verwenden Sie stattdessen den W3C-Standard document.getElementById().
Quelldatei: file:///C:/Temp/countdown.js
Zeile: 17
Die Warnung sagt doch schon alles aus:
document.all (http://de.selfhtml.org/javascript/objekte/all.htm)
document.getElementById() (http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id)

Blue7
09.12.2004, 19:48:38
Original geschrieben von xabbuh
Die Warnung sagt doch schon alles aus:
document.all (http://de.selfhtml.org/javascript/objekte/all.htm)
document.getElementById() (http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id)

Klar, aber wenn ich das dann umbaue läuft der Countdown des Counter nimmer runter.

xabbuh
09.12.2004, 19:52:44
Original geschrieben von Blue7
Klar, aber wenn ich das dann umbaue läuft der Countdown des Counter nimmer runter.
Dann machst du vermutlich irgendwas beim Umbauen falsch. Welche Fehlermeldungen erhälst du denn dann?

Blue7
09.12.2004, 20:01:47
Original geschrieben von xabbuh
Dann machst du vermutlich irgendwas beim Umbauen falsch. Welche Fehlermeldungen erhälst du denn dann?
Keine wie gesagt der Counter der normalerweise runter läuft zeigt es nimmer an, der Rest funzt ja, nur der Countdown nimmer.

Sobald ich an die Stunden/Minuten/Sekunden gehe.

> document.all.left.innerHTML=daysLeft+"Tage "+hoursLeft+"h "+minsLeft+"min "+secsLeft+"s";

wie müsste ich das mit document.getElementById() dann machen.

xabbuh
10.12.2004, 09:39:47
Du weist, dem Element, das bearbeitet werden soll, eine id (http://de.selfhtml.org/html/attribute/allgemeine.htm#uebersicht) (z.B. left) zu.
Anschließend greifst du mit getElementById auf dieses Element zu:

document.getElementById('left').innerHTML = 'usw.';

Blue7
11.12.2004, 14:50:23
Danke, funzt!

Andere Frage noch, kann man die Daten (im JS) irgendwie mit ner DB verknüpfen ?

den Teil
dates[0]=new Date("jan 11, 2005 16:07:00");
events[0]="<br><br><font face=Verdana size=1 color=green><b>XxXX: <a href=xxxxx target=_blank>XXXXXXXXX</a></b><br>XX, 11.01.2005 | 15:00 Uhr<br><br></font><font face=Verdana size=2>auf<br>XXXX</font>";
dates[1]=new Date("dec 31, 2005 23:59:59");
events[1]="<br><br><font face=Verdana size=1 color=green><b><font face=Verdana size=1 color=green><b>Vorerst keine weitere Ausstrahlung bekannt!</b></font>";


also <?php ?> mit den PHP Inlcudes, glaub ned oder?

xabbuh
11.12.2004, 17:51:09
Du könntest das Datum, mit dem gestartet wird aus der Datenbank holen. Du kannst aber nicht bei jeder Aktualisierung der Anzeige einen weiteren Eintrag aus der Datenbank holen, ohne die Seite neu zu laden, falls du das meinst.

Blue7
11.12.2004, 21:31:55
Datenbank ja, übergang zur nächsten Termin automatisch, eigentlich ja. Wenns ned geht, dennoch Danke!

Fix ist auch ok!