Autor | Zpráva | ||
---|---|---|---|
BuGeR Profil |
#1 · Zasláno: 6. 3. 2010, 00:26:28
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 |
#2 · Zasláno: 6. 3. 2010, 12:51:48 · Upravil/a: Witiko
Č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 |
#3 · Zasláno: 6. 3. 2010, 13:21:02
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 |
#4 · Zasláno: 6. 3. 2010, 18:59:38
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 |
#5 · Zasláno: 6. 3. 2010, 19:03:03
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 |
#6 · Zasláno: 7. 3. 2010, 08:26:47 · Upravil/a: matesek
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 |
#7 · Zasláno: 7. 3. 2010, 16:42:53
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. |
||
Časová prodleva: 14 let
|
0