Autor | Zpráva | ||
---|---|---|---|
cheli Profil |
#1 · Zasláno: 13. 1. 2010, 08:22:10
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 |
#2 · Zasláno: 13. 1. 2010, 09:14:09
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 |
#3 · Zasláno: 13. 1. 2010, 09:50:07
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 |
#4 · Zasláno: 13. 1. 2010, 10:07:53
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 |
#5 · Zasláno: 13. 1. 2010, 10:34:18
_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 |
#6 · Zasláno: 13. 1. 2010, 10:45:21
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 |
#7 · Zasláno: 13. 1. 2010, 10:51:54
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 |
||
Časová prodleva: 14 let
|
0