Autor Zpráva
BuGeR
Profil
Dobrý den.
Prosím, nevíte někdo o nějakém hotovém scriptu pro odpočet času do určitého data v sekundách?
Např.: zbýva 1888 sek, zbýva 1887 sek atd.. A aby to odpočítavaní bylo v realném čase.
Děkuji za případnou pomoc.
Witiko
Profil
Článek o objektu Date, kterým zjistíš aktuální čas a budeš ho porovnávat s cílovým časem:
www.jakpsatweb.cz/javascript/objekt-date.html

Článek o metodě setInterval, kterou nastavíš sekundový interval díky kterému se bude informace o čase na stránce obnovovat:
www.jakpsatweb.cz/javascript/casovani.html

Jednoduchá kostra:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Language" content="cs">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
    <script type="text/javascript">
    
      var now = new Date();
      var then = new Date();
      
      function run() {
        then.setMonth(9);
        then.setDate(6);
        then.setHours(0);
        then.setMinutes(0);
        then.setSeconds(0);
        then.setMilliseconds(0);
        if(then.getTime() > now.getTime()) then.setFullYear(then.getFullYear() + 1)
        window.setInterval(
          function(){
            now = new Date();
            document.getElementById("time").innerHTML = String(Math.round((then.getTime() - now.getTime()) / 1000));
          }
        ,1000);
      }
      
    </script>
    <title>Odpočítáváme</title>
  </head>
  <body onload="run();">
    <div align="center">
      Do mých narozenin zbývá <span id="time">x</span> sekund.
    </div>
  </body>
</html>


Pro tento příklad jsem použil návratovou hodnotu metody getTime -> navrací počet milisekund uplynulých od 1.1.1970 00:00. Samo o sobě nepříliš využitelné, nicméně po odečtení návratových hodnot této metody u dvou rozdílných dat a převedení na absolutní hodnotu dostaneme ihned rozdíl mezi dvěma daty v milisekundách bez nutnosti dalších operací.
mckay
Profil
Witiko:
Tleskám ti. Tenhle script se mi bude určitě někdy hodit, tak tenhle post ber jako náznak díku. :)
matesek
Profil
Tohle jsem se taky snažil najít, ale nenašel. Mám teoretickou verzi, která by byla kratší, ale nevím, jestli by fungovala. Jak říkám, teoreticky by měla, ale ještě problém, bylo by to v PHP, takže by se neaktualizovala při pobytu na stránce.
Witiko
Profil
V php bych datum definoval na jednom řádku, takže by celá obslužná funkce zabrala něco kolem 10ti řádků, těžko to už udělat jednodušeji. Nicméně tady bavíme o js řešení (teoreticky by mohlo být vhodné synchronizovat čas na začátku se serverem).
matesek
Profil
Kdybych si nehrál s tím zápisem tvaru slova za číslem , tak by to bylo jen 10 řádků a určitě to jde i jednodušeji .

<form method=post acion="test.php" name=formular>
Den ukončení : <input type="text" name="den_konec">
Mesic ukončení : <input type="text" name="mesic_konec">
Rok ukončení : <input type="text" name="rok_konec">
<input type="submit">
</form>

<?
$den_konec = $_POST['den_konec'];
$mesic_konec = $_POST['mesic_konec'];
$rok_konec = $_POST['rok_konec'];


if($den_konec!="" && $mesic_konec!="" && $rok_konec!="")
{
$den = Date('D');
$mesic = Date('m');
$rok = Date('Y');

$den_rozdil = $den_konec - $den;
$mesic_rozdil = $mesic_konec - $mesic;
$rok_rozdil = $rok_konec - $rok;

echo "Zbývá : 
$rok_rozdil $rok_nazev, 
$mesic_rozdil $mesic_nazev, 
$den_rozdil $den_nazev ";


if($den_rozdil=1)
  $den_nazev="den";
else if($den_rozdil>1 && $den_rozdil<5)
  $den_nazev="dny";
else if($den_rozdil>4 && $den_rozdil=0)
  $den_nazev="dní";

if($mesic_rozdil=1)
  $mesic_nazev="měsíc";
else if($mesic_rozdil>1 && $mesic_rozdil<5)
  $mesic_nazev="měsíce";
else if($mesic_rozdil>4 && $mesic_rozdil=0)
  $mesic_nazev="měsíců";

if($rok_rozdil=1)
  $rok_nazev="rok";
else if($rok_rozdil>1 && $rok_rozdil<5)
  $rok_nazev="roky";
else if($rok_rozdil>4 && $rok_rozdil=0)
  $rok_nazev="let";}
?>
Witiko
Profil
Pěkné, mimochodem ty stringy bych si hodil do Arraye. Nicméně tady jsme na javascript fóru, takže co se týče tématu - pokud bych se rozhodl nevěřit nastavení času u klienta, tak bych si pomocí php scriptu updatoval Date element a poté bych zobrazoval scriptem podobným tomu nahoře. Vzal bych časový rozdíl mezi klientovým nastavením a staženým date a na základě toho bych v tom setInterval pokaždé před vykreslením modifikoval aktuální Date o tuto hodnotu.

Jinak ce se týče přesnosti setInterval, kvůli singlethreaded konstrukci javascriptu nemusí dojít ke spuštění kódu vždy, nicméně dochází k udržení intervalů. Příklad s 1000 ms intervalem:

Takhle nefunguje:
0 ms ---> 1000ms --> 2000ms - nelze spustit, provádí se jiný kód --> 2500 ms - dochází k provedení --> 3500 ms --> 4500 ms ...

Takhle ano:
0 ms ---> 1000ms --> 2000ms - nelze spustit, provádí se jiný kód --> 2500 ms - dochází k provedení --> 3000 ms --> 4000 ms ...

Takže o přesost bych se nebál, rozdíl v reálném zobrazení bude jen v milisekundách, ale opět k přesnému načasování spuštění na 0té milisekundě nejsou v javascriptu nástroje.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0