Autor Zpráva
tajny spion
Profil
Zdravim. Muj dotaz se tyka napul PHP a napul JS. Vzhledem k tomu, ze PHP chapu vic, pisu to sem:
Potrebuju, aby se vzal serverovej cas, ulozil do promenny (nebo nejak uchoval) a nadale spravoval pomoci JS. Neco jsem jiz vyronil:

<script type="text/javascript">
<!--
function cas(){
var DatumCas = new Date();
var hodina = <?php echo date("H"); ?>;
if(hodina < 10) hodina = "0" + hodina;
var minuta = <?php echo date("i"); ?>;
if(minuta < 10) minuta = "0" + minuta;
var sekunda = <?php echo date("s"); ?>;
if(sekunda < 10) sekunda = "0" + sekunda;

var vypis = hodina + ":" + minuta + ":" + sekunda
document.getElementById("hodiny").innerHTML = vypis;
setTimeout("cas()",1000);
}
//-->
</script>

Problem je v tom, ze to ukaze pouze serverovy cas, ale nemeni se po kazde sekunde (1000) tak jak by mel. Zaroven by se ale mel menit pomoci JS, abych zbytecne nemusel navazovat spojeni se serverem. Kdo na neco kapne, pls pomozte.
Nox
Profil
Mno, takže trocha teorie - PHP je zpracovávaný serverem, čiliže předtím, než se to dostane do prohlížeče
a vzhledem k tomu, že si JS samo nic neopatřuje a nemění, vypisuje pouze zadaná data, která se proto pochopitelně nemění,
to znamená, že si musíš PHP hodnoty přes echo vložit do JS proměnných a pak to ve funkci cas() odčítat a vypsat
nosko
Profil
No asi niečo na spôsob:
//global
var hodina = <?php echo date("H"); ?>;
var minuta = <?php echo date("i"); ?>;
var sekunda = <?php echo date("s"); ?>;

function cas() {
.....
var vypis = hodina + ":" + minuta + ":" + sekunda
document.getElementById("hodiny").innerHTML = vypis;
sekunda++;
if(sekunda>59){
sekunda=0;
min++;
}
if (minuta>59) {
hodina++;
minuta=0;
}
.....
// ostatne si dorobis hodina>23........
}
tajny spion
Profil
Uz je to lepsi...

<script type="text/javascript">
var hodina = <?php echo date("H"); ?>;
var minuta = <?php echo date("i"); ?>;
var sekunda = <?php echo date("s"); ?>;

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

if(sekunda > 59) {
sekunda = 0;
minuta++;
}
if (sekunda < 10) {
sekunda = "0" + sekunda;
}
if (minuta > 59) {
hodina++;
minuta = 0;
}
if (minuta < 10) {
minuta = "0" + minuta;
}
if (hodina > 23) {
hodina = 0;
minuta = 0;
sekunda = 0;
}
if (hodina < 10) {
hodina = "0" + hodina;
}
}
//-->
</script>

...ale porad to blbne! Kdyz je minuta mensi nez 10, s kazdou sekundou se pred minutu napise "0" a ja nvm jak to udelat, aby se to takhle nepsalo do "nekonecna"... pravdepodobne je to to samy i s hodinou :(
los
Profil *
Ja by som to napísal napr. nejako takto:
var time = new Date(<?=date('Y,n-1,j,G,"i"-0,"s"-0')?>).getTime();
var date = new Date();
var pad = function(n) { return (n < 10 ? "0" : "") + n; };

setInterval(function() {
date.setTime(time += 1000);
document.getElementById("hodiny").innerHTML = pad(date.getHours()) + ":" + pad(date.getMinutes()) + ":" + pad(date.getSeconds());
}, 1000);

A HTML:
<div id="hodiny"><?=date('H:i:s')?></div>
tajny spion
Profil
los
To muzu rovnou napsat <?php date("H:i:s") ?> ne? Moc totiz nechapu (vubec), co tvuj script dela... tohle je na me uz moc slozity.

Vzhledem, ze tvuj script nechapu, napisu jeste pro jistotu, co pozaduji: aby se vzal a ulozil cas ze serveru (v mem pripade z wz.cz) a dale spravoval (menil po kazde sekunde) pomoci JS, abych zbytecne nezatezoval server. Prosim teda, napis mi to nejjednosuji co to jde nebo tam pridej komentare... rad bych se to rovnou i naucil a pochopil princip, ne jen to nekde opsal. Predem dekuji.
los
Profil *
Keď sa na to teraz pozerám, tak tam mám zbytočne jednu premennú s časom:
var date = new Date(<?=date('Y,n-1,j,G,"i","s"')?>); // čas vygenerovaný serverom
var pad = function(n) { return (n < 10 ? "0" : "") + n; }; // pomocná funkcia pridá nulu pred čísla 0..9

setInterval(function() { // každú sekundu...
date.setTime(date.getTime() + 1000); // ...pričítame sekundu
document.getElementById("hodiny").innerHTML = pad(date.getHours()) + ":" + pad(date.getMinutes()) + ":" + pad(date.getSeconds()); // a vypíšeme čas
}, 1000);
tajny spion
Profil
los
Vypada to dobre, btw jeste jeden dotaz na tebe mam:
Musim mit <body onload="hodiny()"> nebo staci jenom <body>? POdle me staci druha varianta, ale nerad bych neco skryte pokonil.

PS: Kde ses tak naucil JS?
tajny spion
Profil
los
Btw ten cas bezi, a vypada to ze dobre... sice obcas (pri nacitani) bezej sekundy rychlejc, ale to neva. Btw opravdu se to 1x spoji se serverem a kontroluje zbytek pomoci JS? Ty ses borec... respect
los
Profil *
Musim mit <body onload="hodiny()"> nebo staci jenom <body>
V čase, keď ten skript mení obsah elementu id=hodiny, musí byť ten element už nahratý.
Keď to zavoláš na onload alebo v body po elemente id=hodiny, tak bude určite nahratý.
Keď to zavoláš na začiatku nahrávania stránky, tak záleží na tom, či sa stihne do sekundy nahrať - ak nie, tak dojde ku chybe, ale o sekundu sa pokúsi zmeniť obsah toho elementu znova.

Ak to chceš volať na začiatku nahrávania stránky, tak tam doplň ešte kontrolu, či ten element už existuje: if (document.getElementById("hodiny")) document.getElementById("hodiny") = ...
tajny spion
Profil
los
Na h****. Bere to muj cas z PC, nikoliv z webzdarma.cz - pokud tedy nemenej cas na WZ stejne jako ja na svym PC (miliontina procenta?)
tajny spion
Profil
<SCRIPT type="text/javascript">
<!--
var date = new Date(<?php date('Y,n-1,j,G,"i","s"') ?>); /* čas vygenerovaný serverom */
var pad = function(n) { return (n < 10 ? "0" : "") + n; }; /* pomocná funkcia pridá nulu pred čísla 0 až 9 */

setInterval(function() { /* každú sekundu... */
date.setTime(date.getTime() + 1000); // /* ...pričítame sekundu */
document.getElementById("hodiny").innerHTML = pad(date.getHours()) + ":" + pad(date.getMinutes()) + ":" + pad(date.getSeconds()); /* a vypíšeme čas */
}, 1000);
//-->
</SCRIPT>

:(
tajny spion
Profil
los
Do 3.
Proc tam mas <div id="hodiny"><?php date('H:i:s') ?></div>? To muzu rovnou napsat samotnej vypis PHP ne?
los
Profil *
Jasné, že to berie čas z tvojho počítača, keď si pôvodné
<?=date('Y,n-1,j,G,"i","s"') ?>
nahradil za:
<?php date('Y,n-1,j,G,"i","s"') ?>.

<div id="hodiny"><?php date('H:i:s') ?></div>
To tam bolo preto, aby tam na začiatku bol nejaký čas. Najbližšia zmena času sa vďaka časovaniu pomocou setInterval uskutoční až za sekundu, takže dovtedy tam bude zobrazený čas vygenerovaný serverom. Okrem toho, používatelia bez podpory JavaScriptu tam uvidia aspoň tento čas. Toto php si tiež neviem prečo upravil tak, že to nič nevypíše - namiesto "<?php" tam bolo "<?=".
tajny spion
Profil
Ptze si myslim, ze "<?=" a "<?php" je uplne to samy. Jenze ja jsem zvyklej na to druhy, proto jsem to opravil. Jestli to neni to samy, prosim vysvetli proc a jakej je mezi tim rozdil.
los
Profil *
"<?=" môžeš zapísať ako "<?php echo "
tajny spion
Profil
los
Jj, vlastne. CEtl jsem to v knize, ale spatne jsem si to zapamatoval. Njn, clovek se uci cely zivot. Jdu dom to skusit :)

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: