Autor Zpráva
Jenicek
Profil
zdravím, udělal jsem si jednoduchý odpočet...

<script type="text/javascript">
var timerID = null;
var timerRunning = false;
function showtime() {
today = new Date();
Vipkredit = new Date("November 15, 2014, 22:24:27")
msPerDay = 24 * 60 * 60 * 1000 ;
timeLeft = (Vipkredit.getTime() - today.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_hrsLeft = (e_daysLeft - daysLeft)*24;
hrsLeft = Math.floor(e_hrsLeft);
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60);
hrsLeft = hrsLeft;
ahrsLeft = hrsLeft + (daysLeft * 24);
e_minsLeft = (e_hrsLeft - hrsLeft)*60;
secLeft = Math.floor(e_hrsLeft);
secLeft = Math.floor((e_minsLeft - minsLeft)*60);
secLeft = secLeft;
if(secLeft < 10) secLeft = '0' + secLeft;
if(minsLeft < 10) minsLeft = '0' + minsLeft;
Temp3=''+ahrsLeft+':'+minsLeft+':'+secLeft+''
document.getElementById('action_countdown_holder').innerHTML = Temp3;
timerID = setTimeout("showtime()",1000);
timerRunning = true;
}
var timerID = null;
var timerRunning = false;
function stopclock () {
if(timerRunning)
clearTimeout(timerID);
timerRunning = false;
}
function stopClock() {
stopclock();
return;
}
function startclock () {
stopclock();
showtime();
}
</script>

jenže jsem si neuvědomil, že někdo může být v jiném státě a tam by mohl být jiný čas...
co by jste doporučili aby se čas řídil středoevropským časem?
juriad
Profil
Proč středoevropský? Měj veškerý čas v UTC - jsou pro to přímo určené metody.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date (snad vše má UTC variantu).



Doplněno:
Zjistit rozdíl libovolných časových zón není tak jednoduché - musíš ty informace (pravidla) někde mít. Mohl bys sice počítat rozdíl proti UTC (to JS umí), ale pořád ti chybí informace o rozdílu mezi UTC a středoevropským. Kromě základního posunu 1 hodiny je ještě letní čas s nepěkným parvidlem:
„Na letní čas se přechází každý rok poslední neděli v březnu v 02:00:00 SEČ na 03:00:00 SELČ. K návratu na zimní čas dochází poslední neděli v říjnu v 03:00:00 SELČ na 02:00:00 SEČ. Letní čas platí ve všech státech Evropy s výjma Islandu, Ruska, Běloruska, části Grónska a norských ostrovů Jan Mayen a Špicberky.“


Mimochodem, proč používáš setTimeout a ne setInterval?
Jenicek
Profil
no proto by bylo fajn používat pouze středoevropský čas... jelikož jde jen o odpočet tak přece pravidla řízení času je zbytečný... vypočítávat rozdíl mě napadlo také ale stále mi to přijde dost zbytečné
používat jen jedno časové pásmo vše docela zjednoduší... však i na diskusi se používá pouze čas serveru :)
_es
Profil
Jenicek:
však i na diskusi se používá pouze čas serveru :)
No ale JS predsa nebeží na serveri.

přece pravidla řízení času je zbytečný...
Tie pravidlá majú práve tie lokálne časy, ako SEČ, UTC je všade len jeden.
Jenicek
Profil
Původně jsem myslel něco takového
ale asi tam mám někde chybu a jsem slepý

var timerID = null;
var timerRunning = false;
function showtime() {
today = new Date();
casserveru = new Date("October 19, 2014, 16:45:31");
rozdil = (today.getTime() - casserveru.getTime());
if(rozdil < 0)rozdilnycas = (today.getTime() + rozdil.getTime());
if(rozdil > 0)rozdilnycas = (today.getTime() - rozdil.getTime());
Vipkredit = new Date("November 15, 2014, 22:24:27")
msPerDay = 24 * 60 * 60 * 1000 ;
timeLeft = (Vipkredit.getTime() - rozdilnycas.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_hrsLeft = (e_daysLeft - daysLeft)*24;
hrsLeft = Math.floor(e_hrsLeft);
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60);
hrsLeft = hrsLeft;
ahrsLeft = hrsLeft + (daysLeft * 24);
e_minsLeft = (e_hrsLeft - hrsLeft)*60;
secLeft = Math.floor(e_hrsLeft);
secLeft = Math.floor((e_minsLeft - minsLeft)*60);
secLeft = secLeft;
if(secLeft < 10) secLeft = '0' + secLeft;
if(minsLeft < 10) minsLeft = '0' + minsLeft;
Temp3=''+ahrsLeft+':'+minsLeft+':'+secLeft+''
document.getElementById('action_countdown_holder').innerHTML = Temp3;
timerID = setTimeout("showtime()",1000);
timerRunning = true;
}
var timerID = null;
var timerRunning = false;
function stopclock () {
if(timerRunning)
clearTimeout(timerID);
timerRunning = false;
}
function stopClock() {
stopclock();
return;
}
function startclock () {
stopclock();
showtime();
}

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: