Autor Zpráva
Študy
Profil *
Prosim vás mám problém... distal sem za úkol sehnad na jednu hru odpočítávač času a už sem to tu hlecal cca 2h sice sem našel spoustu dobrích scriptů ale mé ten co potřebuju...

já potřebuju aby ten čas byl v hodinách:minutách:sekundách např:

02:29:05


díky všem za pomoc
_es
Profil
Zobrazí aktuálny čas:
<span id="cas"></span>
<script>
window.setInterval(function(){window.document.getElementById("cas").innerHTML=(new Date()).toLocaleTimeString();},1000);
</script>
Nerozumiem, čo myslíš pod tým odpočítavaním, či od nuly do nekonečna, alebo od zadaného času do nuly, podľa toho to treba upraviť.
X-force
Profil *
Myslíš třeba jako za jak dlouho hra vyjde? Zkus to udělat raději ve flashi než v JS
_es
Profil
X-force
Zkus to udělat raději ve flashi než v JS

Dotaz je v sekcii Javascript. Myslíš, že "ve flashi" by to bolo jednoduchšie?
Alebo by si mu mohol poradiť ako na to s Javou, len aby jeho Flash neskončil "ve flaši".
X-force
Profil *
Hmm jen jsem radil, podle mně se rady odkazující na rozšíření, vylepšení, zjednoudušení apod., které se nevstahují k danému tématu jsou jenom + a další možností jak udělat "to samé ale jinak". Pokud nic nenajde tak může začít pátrat na webu na dotazy týkajících se Flashe
Študy
Profil *
no myslel se do 0
Chamurappi
Profil
Reaguji na X-force:
podle mně se rady odkazující na rozšíření, vylepšení, zjednoudušení apod.
Nic z toho jsi mu ale neporadil. Flashem si nijak nepomůže.
X-force
Profil *
Ne? a proč by si s ním nemohl pomoct. Takže podle tebe jak o tak vidím je Flash k ničemu?
_es
Profil
<span id="cas"></span>
<script>
var x=Date.UTC(2008,10,23,12,30,15)+((new Date()).getTimezoneOffset())*60*1000;//23.11.2008 12:30:15 UTC (nie 23.10) + oprava zobrazenia podľa časového pásma
window.setInterval(function(){window.document.getElementById("cas").innerHTML=(new Date(x-new Date())).toLocaleTimeString();},1000);
</script>
V prvom riadku treba zadať čas v UTC, od ktorého sa má odpočítavať.
Malá nevýhoda je, že sa script spolieha na miestne zobrazenie času.
Takže pri anglickom nastavení bude miesto 15:00:00 zobrazovať 03:00:00 PM.
Ešte je možnosť namiesto toLocaleTimeString použiť toTimeString, no potom treba orezať nadbytočné časti.
Alebo tak ako väčšina takýchto scriptov, poskladať to celé do reťazca z jednotlivých častí.
Chamurappi
Profil
Reaguji na _es:
Víš o tom, že konstruktor třídy Date umí přijmout jako argumenty rok, měsíc, den, hodinu, minutu a sekundu a vytváří pak instanci, která už je v časové zóně systému? Mělo by stačit toto:
var x = new Date(2008, 10, 23, 12, 30, 15);
_es
Profil
Chamurappi
„Víš o tom, že konstruktor třídy Date umí přijmout jako argumenty rok, měsíc, den, hodinu, minutu a sekundu a vytváří pak instanci, která už je v časové zóně systému? Mělo by stačit toto:
var x = new Date(2008, 10, 23, 12, 30, 15);


To je pravda, no čas som posunul kvôli volaniu metódy toLocaleTimeString, ktorá výsledný čas posúva podľa časového pásma.
Metóda toLocaleTimeString je vlastne zneužitá na učel, na ktorý nie je určená.
Metóda očakáva čas, no dostáva rozdiel časov, tak to treba "opraviť", aby sa to zobrazilo správne.
Schválne som použil Date.UTC(,,,,,) namiesto new Date(,,,,,), aby nebol čas v x závislý od časového pásma.
Ak by sa script použil napríklad na odpočítanie toho, že sa má napríklad za 5 hodín niečo stať, tak v mojom scripte to nezávisí od časového pásma.
_es
Profil
Chamurappi
Vlastne máš, možno nechtiac, pravdu, dá sa to použiť aj podľa teba, no do konštrukteru Date je treba zadávať tiež čas v UTC.
Vtedy sa všetky tie chyby posunutia času navzájom vyrušia.
Teda kód by mohol byť:
<span id="cas"></span>
<script>
var x = new Date(2008,10,23,12,30,15);//23.11.2008 12:30:15 UTC (nie 23.10) + oprava zobrazenia podľa časového pásma (čas treba zadať v UTC)
window.setInterval(function(){window.document.getElementById("cas").innerHTML=(new Date(x-new Date())).toLocaleTimeString();},1000);
</script>
Chamurappi
Profil
Reaguji na X-force:
a proč by si s ním nemohl pomoct
Protože ve Flashi by musel v ActionScriptu (což je příbuzný JavaScriptu) napsat skoro přesně to samé, co teď potřebuje napsat v JavaScriptu. Flash má menší podporu než JS a je to špatně přístupná neforemná potvůrka.

Takže podle tebe jak o tak vidím je Flash k ničemu?
Řada lidí se mě marně snaží přesvědčit, že k ničemu je — že se hodí jen na reklamy a na drobnosti, které jdou krásně řešit i bez něj (jako třeba odpočítávání).


Reaguji na _es:
Schválne som použil Date.UTC(,,,,,) namiesto new Date(,,,,,), aby nebol čas v x závislý od časového pásma.
Pak sis tu závislost ale sám vyrobil přičtením ((new Date()).getTimezoneOffset())*60*1000.

Ak by sa script použil napríklad na odpočítanie toho, že sa má napríklad za 5 hodín niečo stať, tak v mojom scripte to nezávisí od časového pásma.
Pokud vím, tak mé x je stejné jako tvé x. (Respektive mé x.getTime() je stejné jako tvé x.)
Ty si vyrábíš čas v UTC a pak k němu přičítáš časovou zónu. Já vyrábím čas rovnou v té časové zóně. Co se pak s časy dělá, na tom již moc nezáleží — docházíme k témuž výsledku v hodnotě x.

do konštrukteru Date je treba zadávať tiež čas v UTC
Není. Časové zóny můžeš při počítání rozdílu zanedbat, vyruší se. (Pokud se akce, do níž se odpočítává, koná ve stejné časové zóně, jako se odpočítává.)

Metóda očakáva čas, no dostáva rozdiel časov, tak to treba "opraviť"
Jednak nepotřebuje, jednak nic neopravuješ.

Tím „new Date(x-new Date())“ mimochodem vytváříš datum blízké půlnoci 1. ledna 1970 (času 00:00:00 v UTC). Argument konstruktoru se bere jako počet milisekund od počátku času a … hm. To ti pak přeci musí metoda toLocaleTimeString() vracet špatný čas, ne? Kdyby byl rozdíl jedna sekunda, zavolal by se new Date(1000).toLocaleTimeString() a to by v místním čase zóny GMT+01:00 vypadalo jako „01:00:01“.

Škoda, že není Země placatá.


Reaguji na Študyho:
<span id="cas"></span>
<script>
var x = new Date(2008, 10, 23, 12, 30, 15);
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);
</script>
_es
Profil
Chamurappi
Pri tej závislosti od časového pásma si mi asi nerozumel, myslel som to,
aby sa pri spustení scriptu zobrazil rovnaký odpočet pri hocijakom nastavení časového pásma.
Ak tvoj script spustíš pri rôznych nastaveniach časového pásma, tak bude odpočitavanie rôzne.
Pri mojom scripte bude odpočítavanie stále rovnaké.
Na to, aby tvoj script tiež tak fungoval, stačí to len upraviť:
var x = Date.UTC(2008, 10, 23, 12, 30, 15);
No záleží, či to je naozaj treba, či sa má zobraziť odpočet napríklad do 15:00 miestneho času, alebo či má odpočítať čas do nejakej udalosti na nejakom mieste.
Tvoj script je univerzálnejší na úpravy, dlhší, zložitejší, pomalší.
Môj je zas kratší, rýchlejší, no používa časové funkcie inak, ako sú určené, čo môže niekoho zmiasť.
To chybné použitie priradenia času a použitia časových funkcií, ktoré mi vytýkaš, je naozaj chybné,
no je to chybné úmyselne, ale vo výsledku je to správne.
Celkovo je ten tvoj script asi lepší, mne sa nechcelo až tak hrať s tým algoritmom, ale som použil/zneužil na to toLocaleTimeString.
Študy
Profil *
joj díky moc všem :-D
Chamurappi
Profil
Reaguji na _es:
aby sa pri spustení scriptu zobrazil rovnaký odpočet pri hocijakom nastavení časového pásma
Aha. Už chápu. Dobrý nápad. Docela jsem se v těch časových zónách zamotal.

používa časové funkcie inak, ako sú určené, čo môže niekoho zmiasť
Stejným postupem by nešlo moc pohodlně počítat měsíce či roky. Při rozdílu větším než den udělá tvůj skript modulo 24 hodin.
_es
Profil
Chamurappi
Ešte by sa dali tak počítať dni do 31 (31 dní januára 1970).
No pri nastavení amerického 12 hodinového zobrazenia by bolo asi dosť mätúce to AM/PM.
Metóda toLocaleTimeString je veľmi vhodná pre zobrazovanie presného času, kedy je vlastne tá závislosť od miestneho nastavenia prospešná.
Na tento účel sa veľmi nehodí.
Zdeny RC
Profil *
Nazdar prosím chci pro web odpočet času do konce roku od 1.1.2009 0:0:01 chci rozjet na našem webu nové profily.

Ale a´t to zkouším jak chci nejede mi to pomuže někdo ?
Měsíček
Profil
Vždyť nahoře máš funkční řešení ;-)
Zdeny RC
Profil *
Vždyť nahoře máš funkční řešení ;-)


když to vložim do kodu tak mi to počita jen čas ne dny.....
DJ D8
Profil
Odpočítává to sice dobře, ale zobrazuje to jenom čas do konce dne a nejspíš až bude ten onen den, odpočte to do té hodiny, ale pokud jsem to pochopil, všichni chtějí odpočet stylu: Zbývá: 5 Dní 4 Hod 32 min 15 sek...

Snad něco najdu...

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0