Autor Zpráva
cheli
Profil
Zdravím, mám skript (viz níže), který funuje podle mých potřeb, ale potřeboval bych ho převézt na serverový čas. Pokud tam zadám hodnoty v php skriptu, tak je čas zastaven a funguje jen při aktualizaci prohlížeče. Předem mnohokrát děkuji

<span id="cas"></span>
<script>
var x = new Date(2010, 0, 14, 21, 12, 0);
setInterval(function()
{
  // rozpočítání na časové jednotky (ms, s, min, h)
  var t = Math.max(x - new Date(), 0), parts = [];
  for(var i = 0, m = [1000, 60, 60]; m[i]; i++)
  {
    parts[i] = t % m[i];
    t = Math.floor(t / m[i]);
  }
  parts[i] = t;

  // formátovací hrátky s výstupem
  var cas = [];
  for(var i = 3; i > 0; i--)
    cas[3 - i] = (parts[i] > 9 ? "" : "0") + parts[i];

  // výstup
  document.getElementById("cas").innerHTML = cas.join(":");
}, 1000);
document.write(new Date(),0);
</script>
Joker
Profil
cheli:
Chápu to dobře, že z nějakého důvodu chcete pravidelně aktualizovaný čas v prohlížeči, ale aby odpovídal času na serveru?

V PHP si do Javascriptu předejte nějaký počáteční čas a od něj pak počítejte.
Druhá varianta je předat si počáteční čas, v JS spočítat rozdíl mezi uživatelovým časem a serverem a pak ho zohlednit v počítání.
cheli
Profil
Joker: Asi jsem vás moc dobře nepochopil. Napíšu příklad, jak jsem to zkoušel a vy mi třeba napíšete, co dělam špatně.

Můj vzorec je takový: Konečný čas - aktuální čas = čas do konce
Potřebuji, aby byl pro všechny uživatele čas stejný a když tam bude prohlížečový čas, tak se bude lišit tím, jaký má uživatel čas nastaven v pc.

Stačí když aktuální čas bude serverový. Zkoušel sem to s vteřinami, ale čas je statický a vteřiny se nemění:
...
// rozpočítání na časové jednotky (ms, s, min, h)
  var t = Math.max(x - new Date(2010, 0, 13, 21, 12, <?php echo date("s");?>), 0), parts = [];

...
_es
Profil
cheli:
Asi máš veľké medzery v základných veciach.
PHP vygeneruje stránku a tým celý PHP skript skončí.
Potom už záleží na prehliadači, užívateľovi, javascripte, čo s tým vygenerovaným kódom spraví.
Teda treba:
1) Vygenerovať PHP stránku, s údajom o presnom čase, tak, aby:
2) JavaScript ten údaj správne prečítal a pracoval s ním tak, aby to všetkým návštevníkom robilo to isté.
cheli
Profil
_es:
no tohle byla docela dost obecná rada. Po tom, co sem to několikrát přečetl, by mohlo být znázornění pro vypočítání aktuálního serverového času takové:

stanovit čas v php a v js k tomu neustále přičítat 1 sekundu.
Jinak zatím nevím. Mezery mám, ale nejde se naučit všechno za pár měsíců.
Joker
Profil
cheli:
Viz _es: „PHP vygeneruje stránku a tým celý PHP skript skončí.
Čili to co jsem psal:
- V PHP si do Javascriptu vložíte nějaký "synchronizační" čas ze serveru - ten bude pro všechny stejný.
- Javascript si ten čas vezme jako počáteční a v pravidelných intervalech si ho bude aktualizovat. Čili třeba přičítat tu sekundu, jak říkáte. Nevýhoda tohohle je, že časovač není absolutně přesný a ten skript taky nějakou dobu běží, takže se to postupem času bude rozcházet oproti skutečnosti (podle mých zkušeností o pár sekund za minutu)
- Druhá alternativa je v JS na začátku spočítat rozdíl mezi aktuálním časem na klientovi a synchronizačním časem a pak vždycky brát čas na klientovi plus rozdíl.

Záleží jakou přesnost potřebujete, ale nikdy to nebude absolutně přesné, protože nějaký čas trvá přenos stránky, zpracování stránky atd.
cheli
Profil
Joker:
Dík, tímhle sem se už posunul trošku dál. Nemusim mít ani tak čas totožný se serverovým časem, ale hlavně, aby byl čas všech u uživatelů stejný. Lepší by možná bylo udělat si nějaký svůj čas než brát rozdíly těch časů, ale na to sem asi ještě slabý.
Zatim díky, a kdybyste měl někdo nějaký tip kromě toho, co se tu už napsalo, tak ho rád uvítám. Mějte se

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