Autor Zpráva
tajny spion
Profil
Zdravim. Mnozi z vas si mysli: "OMG, to je určitě zase jeden z tech, kteri chteji JS hodiny na svym webu a nevedi jak."

Castecne mate pravdu. Ovsem ted vam to jeste "ulehcim". Mam dva kody, kazdy je v necem dobry a v necem spatny, potrebuju pomoc nejakeho skuseneho programatora v JS, aby mi je spolcil dohromady a vytvoril hodiny, ktere prejmou + vlastnosti a neziskaji zadne (minumum) -.

Tady je kod 1:

<html>
<head>
<script language="JavaScript">
<!--
function runClock() {
today = new Date();
hours = today.getHours();
minutes = today.getMinutes();
seconds = today.getSeconds();
TimeValue = hours;
TimeValue += ((minutes < 10) ? ":0" : ":") + minutes;
TimeValue += ((seconds < 10) ? ":0" : ":") + seconds;
document.getElementById("hodiny").innerText = TimeValue;
window.setTimeout("runClock()",1000);
}
//-->
</script>
</head>

<body onload="runClock()">
<span id="hodiny"></span>
</body>
</html>


A tady kod 2:
<html>
<head>
</head>
<body>
<script language="JavaScript">
<!--
function naplnCas (){
var datum = new Date(); // prave aktualni cas
aktualniCas = datum.getHours() + "." + datum.getMinutes() + ":" + datum.getSeconds();
// vybral jsem z data, co potrebuju a obalil znamenky, aby se to prevedlo na retezec
window.document.getElementById("cas").innerHTML = aktualniCas;
// vypocitana hodnota se vklada jako html dovnitr elemnetu, ktery ma id "cas"
}

naplnCas(); //naplneni na zacatku
window.setInterval("naplnCas()", 1000); //pravidelna zmena, 1000 je sekunda
//-->
</script>
<span id="cas"></span>
</body>
</html>


Kod 1 ma vyhody: dobry zpusob zapisu a nevyhody: nejde v FF.
Kod 2 ma vyhody: jde ve FF i IE a nevyhody: spatny zpusob zapisu (jednociferne minuty a sekundy nemaji pred sebou "0")

A ja vas zadam vytvorit kod takovy, aby sel v IE i FF (kod 2) a aby mel zpusob zapisu jako kod 1. Predem moc dekuju za snahu a za ochotu.
future
Profil *
//a co tento.... tu mas sekundy minuty hodiny aj s pociatocnou nulou
<html>
<head>

<script type="text/javascript">
<!--
function cas(){
var DatumCas = new Date();
var hodina = DatumCas.getHours();
if(hodina < 10) hodina = "0" + hodina;
var minuta = DatumCas.getMinutes();
if(minuta < 10) minuta = "0" + minuta;
var sekunda = DatumCas.getSeconds();
if(sekunda < 10) sekunda = "0" + sekunda;

var vypis = hodina + ":" + minuta + ":" + sekunda
document.getElementById("datumcas").innerHTML = vypis;
setTimeout("cas()",1000);
}

</script>
</head>

<body onload="cas()">

<font id="datumcas"></font>
</body>
</html>
peta
Profil
tajny spion
http://peter-mlich.wz.cz/x/ww/js/JSpriklady.htm

cast, co resi tu nulu je:
TimeValue = hours;
TimeValue += ((minutes < 10) ? ":0" : ":") + minutes;
TimeValue += ((seconds < 10) ? ":0" : ":") + seconds;
slova jsou promenne, muzes si je nazvat, jak chces

---

Kod 1 ma vyhody: dobry zpusob zapisu a nevyhody: nejde v FF.
Co treba analyza, zkoumani kodu?

document.getElementById("hodiny").innerText = TimeValue;
document.getElementById("datumcas").innerHTML = vypis;

Jaky je mezi 1 a 2 rozdil? :)

Jestlize "TimeValue", jak jsem psal prvne, je textovy nazev promenne a muze byt jakykoliv, pak nema vliv na funkcnost. Tj. v druhem pripade se to jmenuje "vypis".

document.getElementById - je v obou pripadech shodne

"hodiny" a "datumcas" jsou ceske nazvy, pravdepodobne take mohou byt jakekoliv a nemeli by mit vliv na funkcnost

zbyva problem:
.innerText
.innerHTML
jsou JS funkce, kazda jina. Ted je otazka, zda obe funguji v obou zminenych prohlizecich nebo ne. Pokud funguji obe spravne a JS konzola nehlasi chybu, pak je chyba nekde jinde. V opacnem pripade treba jen v nefunkcnim scriptu zmenit prave tuto funkci za tu druhou.

---

kod2:
naplnCas(); //naplneni na zacatku
window.setInterval("naplnCas()", 1000); //pravidelna zmena, 1000 je sekunda
Tohle ti nemuze fungovat, protoze chces pracovat s id=CAS, ale samotne CAS vznikne az po spusteni scriptu.
<span id="cas"></span>
JS konzola musi kricet, ze objekt neexistuje. Je mozne, ze to ale i pres to funguje, protoze pouzivas casovac.

---

Mno, a ted vaznejsi vec. Uvaz. Ma ten cas na tve strance nejaky vyznam? Kazdy ma prece v liste datum, cas i kalendar.
Dalsi problem. Je to javascriptovy cas. Jestlize si v PC nastavim 8.4.1991 5:00 tak mi tvuj program bude hlasit prave tento cas. Cili chybny. Kdybych si chtel seridit hodinky musim hledat na jine strance. Lze vyresit PHP a casem ze serveru, na kterem mas spustene stranky. Ovsem pak je to cas serveru a jestlize tam jej nekdo nastavi spatne... Pak uz to bude treti cas a realny se opet nedozvis.
- jeden je v PC, tez zobrazuje JS
- dalsi na serveru
- a pak realny GTM na oficialnim serveru vuci kteremu se delaji synchronizace, obvykle (takze na serveru, bod 2, by mel byt spravny, ale nelze na to spolehat)
1 - jaky ma smysl zobrazovat stejny cas, jaky ma uzivatel v liste?
2 - jaky ma smysl zobrazovat cas serveru, pokud nemuzes zarucit jeho presnost?
3 - ma smysl zobrazovat realny cas? Ono to bude dost zdrzovat nez se spojis s oficialnim serverem a pozadas jej o presny cas. Pak uz ale moc presny nebude, kdyz se tvuj pozadavek zdrzi.
(3) Tohle jedine by snad smysl melo, ale asi bych to nedaval do hlavni stranky, ale jen jako odkaz na centrum s presnym casem.
tajny spion
Profil
Wow vy ste se teda rozepsali. Hned jak budu mit cas, sednu k tomu a zacnu to studovat. Oboum moc diky. Jo jeste peto... je dobry ten script od future. A future, je dobra rada o pety? Schvalne jak se dohodnete :)
tajny spion
Profil
future
Tvuj kod funguje ve vsech trech prohlizecich. Velice ti dekuju.

peta
Diky za otazky a odpovedi. Naoplatku se zase zeptam neco ja: je podle tebe lepsi dat cas pomoci JS (kdyz uz mi funguje) anebo zbytecne "zatezovat server" kvuli "realnemu" casu?
future
Profil *
tajny spion
moj nazor na hodinky je ten ze vobec ti ich tam netreba, aspon ja nedavam na svoje stranky ziadne, kto chce presny cas tak sa pozrie dole v pravo do listy.
tajny spion
Profil
future
A kdyz je v knihovne nebo skole (a tam to jde blbe) apod? Pak by se seknul "presny" serverovy cas. Co ty na to?
Laman
Profil
tajny spion
tvůj skript jsem nestudoval, ale obecně je imho nejlepší při načtení stránky načíst i serverový čas, ale pak počítat sekundy javascriptem. to je přijatelný kompromis.

každopádně souhlasím s předchozími příspěvky, že žádné hodiny userovi na stránkách k ničemu nebudou
tajny spion
Profil
Laman
Dik. Problem je v tom, ze ovladam HTML, CSS, castecne PHP ale do taju JavaScriptu jsem jeste nezapadl. MOhl bys mi napsat script, nebo upravit tento:

<html>
<head>

<script type="text/javascript">
<!--
function cas(){
var DatumCas = new Date();
var hodina = DatumCas.getHours();
if(hodina < 10) hodina = "0" + hodina;
var minuta = DatumCas.getMinutes();
if(minuta < 10) minuta = "0" + minuta;
var sekunda = DatumCas.getSeconds();
if(sekunda < 10) sekunda = "0" + sekunda;

var vypis = hodina + ":" + minuta + ":" + sekunda
document.getElementById("datumcas").innerHTML = vypis;
setTimeout("cas()",1000);
}

</script>
</head>

<body onload="cas()">

<font id="datumcas"></font>
</body>
</html>
Laman
Profil
na první pohled mi ten skript připadá funkční, co je třeba upravit?

ale každopádně pro tu hybridní verzi by bylo lepší něco takovéhleho

<script>

now=new Date() //zkrátka čas, já zas neumí php, abych ho tam dostal ze serveru
tod=now.getHours()*3600+now.getMinutes()*60+now.getSeconds() //převede čas na sekundy

function clock(){ //rozkládá čas ze sekund na hh:mm:ss a připočítává sekundy
hod=Math.floor(tod/3600)
min=Math.floor(tod/60)%60
sek=tod%60
if(hod<10) hod="0"+hod
if(min<10) min="0"+min
if(sek<10) sek="0"+sek
document.getElementById("datumcas").innerHTML=hod+":"+min+":"+sek
tod++
}
timer()

akce=setInterval("clock()",1000)
</script>


//aktualizace: testoval jsem to jen chvilku a možná je tam nějaký bug, zrovna jsem jeden opravil
tajny spion
Profil
Laman
Dve veci: jaka hybridni verze (IE 6?) a jaky bug a cos vlastne pozmenil oproti mymu a proc?
Laman
Profil
hybridní verze je myšlena jako ta kombinující serverový čas s JavaScriptem

bug už žádný, v tom kódu jsem ho opravil. a hodiny se zdají jít v každou denní dobu správně

a změnil jsem jen to počítací jádro - tys vždycky tahal aktuální čas PC, kdežto já se na něj zeptám jen na začátku a pak přičítám sekundy

není to žádná zásadní změna
tajny spion
Profil
Laman
A ty tahas (tedy jednou "vytahnes") aktualni cas ze serveru? To by bylo lepsi nez z PC... jak to je udelany v tvym kodu? Server nebo PC?
Laman
Profil
v mém skriptu pracuju s obyčejným JS časem, to jest s časem z PC. ale když jsi řešil otázku PC vs server čas, přišlo mi nejlepší při načtení stránky získat ten serverový čas. je to věc php, to neovládám a nemám ani ponětí, jak to v něm bude fungovat. ale jakmile můj JS skript nakrmíš jakýmkoli časem v proměnné tod, bude už sám počítat každou další sekundu (zároveň vymažeš první 1-2 řádky toho JavaScriptu, budou zbytečné)
tajny spion
Profil
Laman
Dik, si koumak... PHP se zacni ucit, pude ti to rychle, je to podobny jak JS.

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:

0