Countdown Problem

Paulus120

Mitglied
Hallo, habe schon viel im Forum über Countdown usw. gelesen. Komme aber nicht weiter.
Ich habe eine Seite in der ich folgenden Counter eingebaut habe.
Code:
<script language="JavaScript">
  <!--
  
  function SymError()
  {
    return true;
  }
  
  window.onerror = SymError;
  
  var SymRealWinOpen = window.open;
  
  function SymWinOpen(url, name, attributes)
  {
    return (new Object());
  }
  
  window.open = SymWinOpen;
  
  //-->
  </script>
  
  <script type="text/javascript">
  <!--
  start=3600;
  function countDown()
  {
  if(start>0)
    {
    start--;
    time=new Array();
    time[0]=parseInt((start%3600)/60);
    time[1]=start%60; for(var k in time){if(time[k]<10){time[k]='0'+time[k];}	}
    document.getElementById('counter').innerHTML=time.join(':');
    setTimeout('countDown()',1000);
    }
  else
    {
    document.getElementById('counter').innerHTML+=
    '<br><a href="">weiter</a>';
    }
  }
  if(document.getElementsByTagName&&
  	 document.getElementsByTagName('title')[0].innerHTML)
  	 {
  	 document.write('<span id="counter"> </span>');
  	 setTimeout('countDown()',1000);
  	 }
  //-->
  </script>
  </body>
  </html>
  <script language="JavaScript">
  <!--
  var SymRealOnLoad;
  var SymRealOnUnload;
  
  function SymOnUnload()
  {
    window.open = SymWinOpen;
    if(SymRealOnUnload != null)
  	 SymRealOnUnload();
  }
  
  function SymOnLoad()
  {
    if(SymRealOnLoad != null)
  	 SymRealOnLoad();
    window.open = SymRealWinOpen;
    SymRealOnUnload = window.onunload;
    window.onunload = SymOnUnload;
  }
  
  SymRealOnLoad = window.onload;
  window.onload = SymOnLoad;
  
  //-->
  </script>

Der Counter läuft 60 Minuten wie im Script angegeben.
Wenn die Seite aufgerufen wird, speichere ich einen aktuellen Timestamp in der Datenbank nach folgendem Format: 20051011100042 Die Spalte heist "beginnantwort"

Jetzt möchte ich das der Counter ab diesem Timestamp die 60 Minuten runterzählt und auch nicht von neuem Startet wenn die Seite neu aufgerufen wird.

Vieleicht kann mir jemand helfen. Bin ein bischen überfordert.

Danke Paulus120
 
Moin,
versuch es doch mittels Cookie, in dem du dann die schon verstrichene Zeit abspeicherst!
So könntest du bei neuem Seitenaufruf das Cookie abfragen, ob schon eine Zeit verstrichen ist.
 
Wird die Seite erneut aufgerufen, errechne die Differenz zwischen dem in der DB gespeicherten Timestamp und dem aktuellen....dann hast du den Sekundenwert, den du bei start angeben musst.
 
Nö...das darfst du nicht machen.
Ein MySQL-Timestamp richtet sich nach der Zeit des DB-Servers, ein JS-Timestamp nach der Zeit auf dem Rechner des Benutzers....also sind beide Zeiten nur identisch, wenn der DB-Server auf dem Clientrechner läuft(was nur der Fall sein dürfte, wenn du das bei dir lokal testest).

Du berechnest die restlichen Sekunden, indem du von der aktuellen Serverzeit NOW() die in der DB als Timestamp gespeicherte Zeit abziehst.....

Code:
SELECT NOW()-timestampfeld as restsekunden WHERE USERID='idDesUsers'

die restsekunden kannst du dann als JS-Variable in das Dokument schreiben(in dem Skript aus dem Eingangsposting wäre das start ) und mit JS herunterzählen.

Beachte bei der TIMESTAMP-Spalte, dass sie eine Länge von 12 oder 14 haben muss, sonst werden keine Sekunden gespeichert ;)
 
Ich hab den Countdown jetzt soweit am laufen das er funktioniert und auch beim reload nicht neu anfängt. Habe jetzt folgendes Script:

Code:
<script type="text/javascript">
  <!--
  ende=<? echo"$beginnantwort"; ?>;
  iHTML=false;
  function printCounter()
  {
  out='<form name="fCD"><input type="text"size="7"name="CD"></form>';
  if(document.getElementsByTagName&&document.getElementsByTagName('title')[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>

Was muss ich denn ändern damit mir nach Ablauf nicht OK angezeigt wird sondern das eine neue Seite gestartet wird. Vieleicht könnt Ihr nochmal helfen.

Gruß Paulus120
 

Neue Beiträge

Zurück