Autor Zpráva
jiri15
Profil
Dobrý den,

chtěl bych poprosit někoho ze zdejších guru o radu co dělám špatně. Mám v HTML frame se 4 políčky ve kterých se zobrazuje čas. Vše funguje naprosto v pořádku, pouze v posledním políčku se čas ukazuje špatně, například po 14:59 ukáže 14:60, 14:61, správně má být 15:00, 15:01.
Prosím můžete mne popostrčit, nebo polopaticky ukázat v čem dělám chybu? Dole připojuji komplet kod.
Děkuji
Jiri



<TABLE border=0 width="98%" align=center>
<TBODY>
<TR>
<TD>
<TABLE border=0 width="98%" align=center>
<TBODY>
<TR>
<TD>
<STYLE type=text/css>
<!--
.style1 {
      font-size: 12px;
      font-weight: bold;
}
-->
</STYLE>

<FORM name=clock>
<TABLE border=1 cellSpacing=2 cellPadding=2 width=350 bgColor=#558ec7 align=center>
<TBODY>
<TR>
<TD colSpan=4 align=middle><STRONG><!-- Get todays Date -->
<SCRIPT type=text/javascript>
var monthArray=new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
function countDDay(d,m,yr) {
var today=new Date();
var todayY=today.getYear();
if (todayY < 1000)
todayY+=1900;
var todayM=today.getMonth();
var todayD=today.getDate();
var todaystring=monthArray[todayM]+" "+todayD+", "+todayY;
var paststring=monthArray[m-1]+" "+d+", "+yr;
var difference=(Math.round((Date.parse(todaystring)-Date.parse(paststring))/(59*60*24*1000))*1);
difference+=" ";
document.write(todaystring);
}
countDDay(01,12,2013);
</SCRIPT>
</STRONG></TD></TR>

<!-- Get the 1st Time -->
<TR>
<TD vAlign=center align=middle><INPUT align=center size=4 name=local1>
<SCRIPT type=text/javascript>
function watch1() {
var today=new Date();
var HoursU=today.getUTCHours();
var MinutesU=today.getUTCMinutes();
if (HoursU<10)
HoursU="0"+HoursU;
if(MinutesU<10)
MinutesU="0"+MinutesU;
document.clock.local1.value=HoursU+":"+MinutesU;
setTimeout("watch1()",1000);
}
watch1();
 </SCRIPT>
 <B>xxx</B>
</TD>

<!-- Get the 2nd Time -->
<TD vAlign=center align=middle><INPUT align=center size=4 name=local2>
<SCRIPT type=text/javascript>
function watch2() {
var today=new Date();
var HoursU=today.getUTCHours()+1;
var MinutesU=today.getUTCMinutes();
if (HoursU<10)
HoursU="0"+HoursU;
if(MinutesU<10)
MinutesU="0"+MinutesU;
document.clock.local2.value=HoursU+":"+MinutesU;
setTimeout("watch2()",1000);
}
watch2();
 </SCRIPT>
 <B>xxx</B>
</TD>

<!-- Get the 3rd Time -->
<TD vAlign=center align=middle><INPUT align=center size=4 name=local3>
<SCRIPT type=text/javascript>
function watch3() {
var today=new Date();
var HoursU=today.getUTCHours()+1;
var MinutesU=today.getUTCMinutes();
if (HoursU<10)
HoursU="0"+HoursU;
if(MinutesU<10)
MinutesU="0"+MinutesU;
document.clock.local3.value=HoursU+":"+MinutesU;
setTimeout("watch3()",1000);
}
watch3();
 </SCRIPT>
 <B>xxx</B>
</TD>



<!-- Get the 4rd Time -->
<TD vAlign=center align=middle><INPUT align=center size=4 name=local4>
<SCRIPT type=text/javascript>
function watch4() {
var today=new Date();
var HoursU=today.getUTCHours()+4;
var MinutesU=today.getUTCMinutes()+30;
if (HoursU<10)
HoursU="0"+HoursU;
if(MinutesU<10)
MinutesU="0"+MinutesU;
document.clock.local4.value=HoursU+":"+MinutesU;
setTimeout("watch4()",10);
}
watch4();
 </SCRIPT>
 <B>xxx</B>
</TD>
</TR>
</TBODY>
</TABLE>

</FORM>
</TD>
</TR>
</TBODY>
</TABLE>
<DIV>
</DIV>
</TD>
</TR>
</TBODY>
</TABLE>
_es
Profil
jiri15:
var MinutesU=today.getUTCMinutes()+30;
Z toho kódu je predsa jasné, že to môže byť niekedy aj číslo väčšie ako 59.

setTimeout("watch4()",10);
Aktualizácia minút 100 krát za sekundu?
jiri15
Profil
_es:
Děkuji za odpověď, jen bych chtěl požádat jestli mi můžete uvést jak dané parametry změnit (jaké dosadit korektní hodnoty0.
weroro
Profil
function watch4()
{
  var today = new Date();
  var HoursU = today.getUTCHours() + 4;
  var MinutesU = today.getUTCMinutes() + 30;
  if (MinutesU > 59)
  {
        MinutesU -= 60;
        HoursU++;
  }
  if (MinutesU < 10)  MinutesU = "0" + MinutesU;
  if (HoursU < 10) HoursU = "0" + HoursU;
  document.clock.local4.value = HoursU + ":" + MinutesU;
  setTimeout("watch4()", 1000);
}
watch4();
_es
Profil
weroro:
S hentakým pochybným kódom sa mi veľmi babrať nechce. Všeobecne najprv zmeniť čas príslušného objektu Date a až potom z neho zisťovať hodiny a minúty.
weroro
Profil
_es:
Myslím, že to je jedno. Stačilo tam hodiť tú jednu podmienku, ktorá to "ošetruje". Aspoň u mňa to fungovalo korektne, myslím, že je to ok.

// Aspoň som si po dlhej dobe nastavil poriadne čas na systémových hodinách. :)
jiri15
Profil
weroro:
Dobrý den,
udělal jsem to jak radil weroro, tj. kod vypadá následovně:

<!-- Get the 4rd Time -->
<TD vAlign=center align=middle><INPUT align=center size=4 name=local4>
<SCRIPT type=text/javascript>
function watch4()
    function watch4()
{
  var today=new Date();
  var HoursU=today.getUTCHours() + 4;
  var MinutesU=today.getUTCMinutes() + 30;
  if (MinutesU > 59)
  {
        MinutesU -= 60;
        HoursU++;
    }
  if(MinutesU < 10)
  {
    MinutesU="0" + MinutesU;
  }
  if (HoursU < 10)
  {
    HoursU="0" + HoursU;
  }
  document.clock.local4.value=HoursU + ":" + MinutesU;
  setTimeout("watch4()",1);
}
                         
watch4();
</SCRIPT>
 <B>xxx</B>

zkoušeno v Chrome 24.0.1312.56 m, poslední políčko je prázdné a žádný čas se nezobrazí. Kde dělám chybu?
Děkuji za vaši trpělivost
_es
Profil
weroro:
Myslím, že to je jedno.
Nemôže to byť predsa jedno. Predsa ak k aktuálnym minútam niečo prirátaš, tak ti môže vyjsť číslo väčšie ako 59, rovnako aj pri hodinách viac ako 23.

jiri15:
Kde dělám chybu?
Jednako v tom, že spúšťaš všelijaké pochybné kódy a ešte v tom, že ich ešte viac „pokazíš“:
setTimeout("watch4()",1);
To očakávaš, že ti bude prehliadač to formulárové pole meniť 1 000 krát za sekundu?

function watch4()
    function watch4()
...
To je snáď syntaktická chyba, nie?
weroro
Profil
_es:
... rovnako aj pri hodinách viac ako 23.
Teraz som sa plesol po čele. To som skutočne prehliadol. Máš pravdu.

jiri15:
To nedokážeš poriadne skopírovať ani kus textu?

<script type="text/javascript">
    function watch4()
    {
      var today = new Date();
      var HoursU = today.getUTCHours() + 4;
      var MinutesU = today.getUTCMinutes() + 30;
      
      if (MinutesU > 59)
      {
            MinutesU -= 60;
            HoursU++;
      }
      if (HoursU > 23) HoursU -= 24;
      
      if (MinutesU < 10)  MinutesU = "0" + MinutesU;
      if (HoursU < 10) HoursU = "0" + HoursU;
      document.clock.local4.value = HoursU + ":" + MinutesU;
      setTimeout("watch4()", 1000);
    }
    watch4();
</script>

_es:
Snáď som ťa dobre pochopil, že si ma chcel iba upozorniť na chybu. A ak nie, vyhovor mi toto zmýšlanie: Ako prvé kontrolujem minúty. Ak ku napr. 44 minútam pripočítam 30, dostanem 74. Od toho odčítam 60 minút a prepíšem premennú Minuty výsledkom, zároveň zvýšim hodnotu Hodiny o 1. Ďalej kontrolujem hodiny a ak je hodnota väčšia ako 23 odčítam z danej hodnoty 24 a dostanem správny čas. Je to iba fix divného kódu.
jiri15
Profil
weroro:
Děkuji všem za trpělivost a opravu tohoto pseudokodu, už jsem to zkopíroval správně.
_es
Profil
weroro:
Snáď som ťa dobre pochopil
Nie, príslušnému objektu Date najprv posunieš čas a až potom z neho zisťuješ hodiny a minúty. Ale aj tak tie lokálne časy nebudú vždy správne: letný a zimný čas.

jiri15:
Viď aj Časté potíže, zajímavosti a poučné debaty » Nepoužívejte eval, ani jeho obdoby.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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