# Countdown Zähler in min. und sek.



## Subwoover (5. Dezember 2003)

Hey ihr!

Bin sehr unerfahren in JS und suche eine möglichkeit einen cowndown zu zählen...
es soll dabei die minuten- und sekundenanzahl angezeigt werden die noch verbleiben bis zu einem aus eriner sql-DB ausgelesenen zeit. (php)

ich möchte aber auch dass wenn die eine minute um ist, der sek. timer auf 00 springt und der minutentimer eine nummer kleiner, eh klar 
wenns geht wärs super wenn das ganze auch ohne input feldern geht...

kann mir da wer auf die sprünge helfen?!


----------



## Sven Mintel (6. Dezember 2003)

In welchem Format kommt die Ablaufzeit denn aus der DB?


----------



## Subwoover (6. Dezember 2003)

kann ich mittels php in jedes format umwandeln!
es kommt wahrscheinlich im timestamp


----------



## Sven Mintel (6. Dezember 2003)

Das Skript:

```
<script type="text/javascript">
<!--
ende=1070827824;
iHTML=false;
function printCounter()
{
out='<form name="fCD"><input type="text"size="7"name="CD"></form>';
if(document.getElementsByTagName&&document.getElementsByTagName('script')[0].innerHTML)
	{iHTML=true;
	out='<span id="CD">f&nbsp</span>';
	}
return out;
}
function countDown()
{
out='0:00';
now=new Date();now=parseInt(now.getTime()/1000);
if(now<ende)
	{
	out=parseInt((ende-now)/60)+':';
	sek=(ende-now)%60;
	if(sek<10){out+='0';}
	out+=sek;
	}
if(iHTML){document.getElementById('CD').innerHTML=out;}
else{document.fCD.CD.value=out;}
if(now<ende){setTimeout("countDown()",1000);}
}
window.onload=countDown;
//-->
</script>
```
Der Timestamp aus der DB kommt bei "ende" hin.
Die Sache läuft ohne <input> bei IE5+,Opera7+,Netscape7+,Mozilla.
Bei den anderen gehts nicht ohne 

Dort in der Seite, wo der Countdown erscheinen soll, noch folgendes hinein:

```
<script type="text/javascript">
<!--
document.write(printCounter());
//-->
</script>
```


----------



## funnyzocker (22. Mai 2004)

*Frage*

Also ich habe das nun so gemacht.

```
<?

$ghaben = mysql_query("SELECT * FROM startsperre WHERE kid='$_SESSION[user]'");
while($dbdata = mysql_fetch_array($ghaben)) {
$neuesende = $dbdata[time] + 2700 ;
?>

<script type="text/javascript">
<!--
ende=<? echo"$neuesende"; ?>;
iHTML=false;
function printCounter()
{
out='<form name="fCD"><input type="text"size="7"name="CD"></form>';
if(document.getElementsByTagName&&document.getElementsByTagName('script')[0].innerHTML)
	{iHTML=true;
	out='<span id="CD">f </span>';
	}
return out;
}
function countDown()
{
out='OK';
now=new Date();now=parseInt(now.getTime()/1000);
if(now<ende)
	{
	out=parseInt((ende-now)/60)+':';
	sek=(ende-now)%60;
	if(sek<10){out+='0';}
	out+=sek;
	}
if(iHTML){document.getElementById('CD').innerHTML=out;}
else{document.fCD.CD.value=out;}
if(now<ende){setTimeout("countDown()",1000);}
}
window.onload=countDown;
//-->
</script>
<script type="text/javascript">
<!--
document.write(printCounter());
//-->
</script>
<?
}
?>
```

Wie kann ích das Ändern damit ich die Anzeige nicht in einem FormFeld habe?
Aufgrund meines Design nimmt das Feld leider die HintergrundFarbe des Designs mit an, Das soll es aber nicht


----------



## Sven Mintel (23. Mai 2004)

Das kommt auf den Browser an... versteht er innerHTML, dann wird das als normaler Text angezeigt, wenn nicht, dann in einem Formularfeld. Was benutzt du denn für einen Browser

Es sollte eigentlich bei IE5+,Mozilla,Netscape7 und Opera7 ohne Formularfeld daherkommen.

Ich seh grad, dass der Opera da nen kleines Problem hat....
Ersetze mal in function printCounter() in der Zeile:

```
if(document.getElementsByTagName&&document.getElementsByTagName('script')[0].innerHTML)
```
...das fette "script" durch "title".
Das ganze Skriptzeugs muss dann im Quelltext *hinter* dem <title>-Tag stehen.(vielleicht lags ja bei dir auch daran).
Ansonsten kannst du dem Textfeld auch eine andere Farbe geben, die entsprechende Stelle sollte nicht schwer zu finden sein

Mal was anderes... sehe ich das richtig, dass, wenn dein DB-Query mehr als ein Datensatz liefert, auch die ganzen Skripte mehrmals in die Seite geschrieben werden sollen.... zumindest ist dies jetzt der Fall
...Das wird so nicht funktionieren...


----------



## funnyzocker (23. Mai 2004)

*Doch*

Doch die DB Query gibt exakt 1 Ergebnis aus.
Da ich in der Where Klauser nach einer Session Variable suche die nur einmal vergeben wird!
Dadurch ist die Gefahr nicht vorhanden das mehr als 1 Ergebnis ausgegeben wird.

Wäre auch schlimm dann würde mein ganzes Projekt nicht mehr Funktionieren 

Danke für die Lösung. Es hat Geklappt mit dem script ersetzten durch title.
Schon ist es in  keinem FormFeld mehr.

Danke dir


----------



## fanste (12. April 2005)

*Re: Frage*

Hallo,

Ich hab mir dein Skript auch mal angeschaut und will es weiterverwenden.
Kann man dann auch, wenn die zeit auf 0 abgelaufen ist etwas ausführen lasse?
bei mir soll dann nämlich ein mysql_query ausgeführt werden.

mb fanste

PS: bin noch sehr unerfahren mit Javascript


----------



## Sven Mintel (12. April 2005)

*Re: Frage*

Sicher kannst du da etwas ausführen lassen.... passiert dort ja auch, wenn du genau hinschaust.
Allerdings keine PHP-Funktionen.

Wenn du ein mysql_query() initialisieren willst, stehen die diese Varianten zur Verfügung.


----------



## fanste (12. April 2005)

*Re: Frage*

Danke für die schnelle Antwort. werds mir mal anschauen


----------



## Tageslicht (13. April 2005)

wie bekomm ich es hin das ich einen 2. Countdown auf der selben seite habe ? 

Also beide sollen unabhängig voneinander arbeiten 


Mfg


----------



## con-f-use (13. April 2005)

Hab da einen Halbwegs passabelen Countdown, der auch mehrmals gestartet werden kann, während die Seite Schon geladen ist. Ist dort auch erklärt.

 Wenn es dir auch reicht alle Countdowns beim laden zu saten ist der Countdown von Sven aus Kompatibilitäts- und Handhabungsgründen natürlich die bessere Wahl.


----------



## Tageslicht (13. April 2005)

so richtig ist dies auch nicht die lösung ! 

Ich möchte es so haben , das ich 2 Datenbankfelder habe ( wo jeweils der Timestamp reinkommt ) 

2 Button´s : 

Ich starte nun Button 1 und er holt sich den 1. Timestamp 

start 2. Button und er holt sich den 2. Timestamp 

Also der countdown von Sven ist schon ok , nur brauche ich das script 2 mal auf einer seite , was so natürlich nicht geht 


gibt es da irgenteine lösung für ? 

mfg


----------



## con-f-use (13. April 2005)

Du könntest per PHP die *Timestamps unsichtbar ins Dokument schreiben*, beim klick auf den Button den *richtigen Timestamp auslesen* und *die Differenz zum jetzigen Timestamp ermitteln*, sie *in Sekunden umrechnen* und *damit meinen Coundown starten*. 
  Wie du die Timestamps umwandelst kannst du glaube ich aus den vorangegangenen Posts herauslesen, ansonsten mach dich einfach ein wenig mit dem Date()-Objekt vertraut.

   Wenn die Timestamps wirklich den aktuellen Wert aus der Datenbank haben sollen, du sie also *nicht beim laden ins Dokument schreiben kannst*, wirst du um ein Neuladen beim Druck auf den Button nicht herumkommen und kannst in dem Fall auch den Coundown von Sven benutzen.


----------

