Autor Zpráva
David1256
Profil
Chtěl bych se zeptat, jestli nejde nějak udělat, aby se čas na stránce aktualizoval, tzn. po vteřině tam skočí další vteřina.
Mám to zatím takhle, ale to vypíše ten čas jen při načtení stránky.
<?php
$datum=Date("d.m.YH:i:s");
echo $datum ?>
Fergi
Profil
Jde to pomocí javascriptu (www.jakpsatweb.cz/javascript/priklady/datum-menici.html) pomocí php něco takového nelze udělat....
Alphard
Profil
Lze to např. javascriptem http://www.jakpsatweb.cz/javascript/priklady/datum-menici.html.
PHP to neumí. Stránka se vygeneruje a pak už se nemění.
PS: naprostou většinu návštěvníků to nezajímá. Mají hodiny v pravém dolním rohu na monitoru, možná i v postranním panelu, hodinky, budík na stole, hodiny na zdí...
David1256
Profil
Děkuji, ale jak to vylepšit, aby se zobrazovaly minuty, sekundy a vůbec vše ve formátu :08 a né jen :8 jak je to na http://www.jakpsatweb.cz/javascript/priklady/datum-menici.html
Moderátor Alphard: Přesunuto do javascriptu.
Witiko
Profil
Nějak takto? (Poznámka: sleduj //komentáře)

<p>Ahoj, teď je právě <span id="cas"></span>.
<script type = "text/javascript">
function naplnCas(){
  var datum = new Date();
  var aktualniCas = [String(datum.getHours()),String(datum.getMinutes()), String(datum.getSeconds())];
  for(var count = 0; count < aktualniCas.length; count++) {
    if(aktualniCas[count].length < 2) aktualniCas[count] = "0" + aktualniCas[count];
  }
  window.document.getElementById("cas").innerHTML = aktualniCas.join(":");
}

// Přesunul bych celý script do head a následující řádky nalepil na window.onload = function() {
naplnCas();
window.setInterval("naplnCas()", 1000);
// }

</script>


Takhle ale celý script závisí na nastavení času u návštěvníka. Pokud chceš synchronizaci se serverem pomocí php, není nic lehčího.
Schéma jak na to:

// Potřeba umístit rovnou do head, aby nebyl čas zkreslený dobou načítání stránky
var clientTime = new Date().getTime();
var serverTime = <?php echo time()*1000; ?>; // php operuje v řádu sekund, ne milisekund jako javascript
var offset = serverTime - clientTime;

 ...
 
pak ve funkci naplnCas:

var datum = new Date();
datum.setTime(datum.getTime() + offset);
David1256
Profil
Ti nevim jak tobě, ale mně to zobrazuje pořád ve formátu :1 a né :01.
Witiko
Profil
Protože jsem se upsal v for cyklu, netestovala se délka řetězce ale tabulky, opraveno.
_es
Profil
David1256:
Vyhľadaj si na tejto diskusii nejaký iný skript. Hľadaj "odpočet".
David1256
Profil
Witiko:
Díky už to funguje, jak má.
Witiko
Profil
Tady je ten php script, který zajistí, že čas není závislý na klientovi:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Čas</title>
<script type='text/javascript'>
  
  var clientTime = new Date().getTime(),
      serverTime = <?php echo time()*1000; ?>,
      offset = serverTime - clientTime,
      serverTimeSpan, clientTimeSpan;
  
  function time() {
    if(!serverTimeSpan || clientTimeSpan) {
      serverTimeSpan = document.getElementById("server-time");
      clientTimeSpan = document.getElementById("client-time");
    }
    var timeObject = new Date();
    var clientTime = [String(timeObject.getHours()), String(timeObject.getMinutes()), String(timeObject.getSeconds())];
    timeObject.setTime(timeObject.getTime() + offset);
    var serverTime = [String(timeObject.getHours()), String(timeObject.getMinutes()), String(timeObject.getSeconds())];
    for(var count = 0; count < 3; count++) {
      if(clientTime[count].length < 2) clientTime[count] = "0" + clientTime[count];
      if(serverTime[count].length < 2) serverTime[count] = "0" + serverTime[count];
    }
    serverTimeSpan.innerHTML = serverTime.join(":");
    clientTimeSpan.innerHTML = clientTime.join(":");
  }

</script>
</head>
<body onload="window.setInterval(time,1000);">
<b><span id="server-time"><?php echo date( 'H:i:s', time() ) ?></span></b> - Server time<br>
<b><span id="client-time"><script type="text/javascript">
(function() {
  var timeObject = new Date();
  var clientTime = [String(timeObject.getHours()), String(timeObject.getMinutes()), String(timeObject.getSeconds())];
  for(var count = 0; count < 3; count++) {
    if(clientTime[count].length < 2) clientTime[count] = "0" + clientTime[count];
  }
  document.write(clientTime.join(":"));
})();
</script></span></b> - Client time
</body>
</html>


Živá ukázka
David1256
Profil
Witiko:
Díky ještě jednou.

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:

0