Autor | Zpráva | ||
---|---|---|---|
Brambora Profil * |
#1 · Zasláno: 18. 5. 2020, 20:32:13
Živá ukázka
kod ukáže asi můj problém... nevede se mi získat správné počítání hodin... nějak nevidím kde je chyba... i když "++c" ddělím zobrazuje to nesprávný čas |
||
Serg Profil |
Podle toho, co je v ukázce, tak:
1) funkce uvnitř funkce nevypadá hezky 2) proměnná "c" s timestampem má nějak moc cifer (myslím že jedna nula je tam navíc) 3) k tomu to pak ještě po vynásobení 1000 při vytváření objektu Date z toho udělá asi nějaké desetiny mikrosekund, přitom Date chce argument v milisekundách, myslím 4) místo neustálého vytváření nových objektů Date by podle mě bylo efektivnější použít metodu setSeconds d.setSeconds(d.getSeconds() + 10); Nějak takle, ale nevím proč nefunguje zastavení intervalu :D var c = 1589826348000; //20:25 var d = new Date(c); var myTimer = false; function clock() { myTimer = setInterval(myClock, 1000); } function myClock() { d.setSeconds(d.getSeconds() + 1); var h = d.getHours(); var m = d.getMinutes(); var s = d.getSeconds(); document.getElementById("demo").innerHTML = (h + ":" + m + ":" + s); } function stop() { if (myTimer) { clearInterval(myTimer); myTimer = false; } } Případně pokud by bylo potřeba měnit hodnotu c, tak potom by to místo prvního řádku funkce myClock chtělo napsat něco jako: c += 1000; var d = new Date(c); |
||
Brambora Profil * |
Serg:
„2) proměnná "c" s timestampem má nějak moc cifer (myslím že jedna nula je tam navíc)“ je to microtime ... počet nul je určitě správný :) „k tomu to pak ještě po vynásobení 1000 při vytváření objektu Date z toho udělá asi nějaké desetiny mikrosekund, přitom Date chce argument v milisekundách, myslím“ počítá se c + 1 což je ale jedna milisekunda... aby jsem docílilo sekundy vynásobila jsem to 1000 Serg: „Nějak takle, ale nevím proč nefunguje zastavení intervalu :D“ ale děkuji nakopl jsi měk správnému řešení :) |
||
Serg Profil |
Brambora:
„je to microtime“ Bavíme se o čísle 15898263460000 , že? V tom případě je to ale ve stovkách mikrosekund, nebo chybí 2 nuly, nebo je to v milisekundách a ukazuje to na rok 2473.
Po vydělení 10 by to bylo v milisekundách, a to je přesně to, co chce konstruktor objektu Date. (v jedné z jeho variant) „počítá se c + 1 což je ale jedna milisekunda... aby jsem docílilo sekundy vynásobila jsem to 1000“ To by vypadalo asi nějak takle: 15898263460000 + 1 = 15898263460001 15898263460000 * 1000 = 15898263460001000 Ale jestli by to mělo přičíst jednu vteřinu, tak by to mělo dopadnout takle: 1589826347000 Takže je spíš potřeba přičíst 1000, nebo mít "c" v sekundách a pak to v konstruktoru vždy násobit 1000 aby z toho vznikly ms. |
||
Radek9 Profil |
#5 · Zasláno: 18. 5. 2020, 22:03:13
Serg:
„1) funkce uvnitř funkce nevypadá hezky“ To je naprosto běžně používaný konstrukt, potřebuješ-li využít closure. Brambora: „je to microtime ... počet nul je určitě správný :)“ Pokud by se to rovnou předávalo do Date , tak by to měl být čas v milisekundách. 15898263460000 odpovídá roku 2473. 1589826346000 odpovídá roku 2020.
„počítá se c + 1 což je ale jedna milisekunda... aby jsem docílilo sekundy vynásobila jsem to 1000“ Buď měj c v milisekundách a přičítej 1000 (a už to nenásob), nebo to měj v sekundách (tzn. 1589826346) a přičítej 1 (a násob 1000). Mícháš dvě věci dohromady, takže ti to leze do šílených řádů.
|
||
Časová prodleva: 4 roky
|
0