2 votes

Horloge en Javascript

J'ai créé une horloge en javascript mais c'est une horloge statique. Quelles modifications dois-je apporter au code suivant pour qu'il se mette à jour toutes les secondes.

<html>
<head>
    <title>Javascript Clock</title>
    <script type="text/javascript">
        function clk() {
            var a=new Date();   
            document.getElementById("disp").innerHTML=a.getHours() + ":" + a.getMinutes() + ":" + a.getSeconds() ;

        }
    </script>
</head>

<body>
    <input type="button" onclick="clk()" value="Display Clock" />
    <p id="disp">Clock Space</p>
</body>

</html>

6voto

Twisol Points 1061

Vous pouvez utiliser setInterval pour exécuter votre fonction clk() toutes les secondes :

setInterval(clk, 1000); // run clk every 1000ms

MDN sur setInterval

Comme le souligne nnnnnn, l'intervalle de la minuterie ne sera probablement pas synchronisé avec le passage d'une seconde réelle, en temps réel, de sorte que l'utilisation d'un intervalle de 100 ms n'est peut-être pas une mauvaise idée.

0voto

姚先进 Points 11

Vous pouvez ajouter setTimeout(clk,1000); à votre fonction, comme ci-dessous :

function clk() {
        var a=new Date();   
        document.getElementById("disp").innerHTML=a.getHours() + ":" + a.getMinutes() + ":" + a.getSeconds() ;
        setTimeout(clk,1000);
    }

0voto

stevenvh Points 1284

setTimeout comme suggéré dans quelques réponses n'est pas la bonne réponse. setTimeout et setInterval peuvent se ressembler, mais setTimeout est destiné aux événements uniques, tandis que setInterval sert à répéter des événements, comme une horloge.

Ainsi, setInterval est la bonne réponse, mais Twisol n'offre que la moitié de la solution. La fonction setInterval démarre une horloge au chargement de la page, mais vous devez également arrêter l'horloge lorsque vous chargez une autre page. Si vous ne le faites pas, chaque fois que vous chargez à nouveau la page de votre horloge, un nouveau minuteur démarre alors que les anciens sont toujours conservés par votre navigateur.

<body onLoad="startTimer();" onUnload="stopTimer();">    

Lorsque vous démarrez la minuterie, le setTimeout renvoie l'identifiant de la minuterie, que vous transmettez comme argument à la fonction clearTimeout fonction :

var intervalID;
function startTimer() {
  intervalID = window.setInterval(updateDateAndTime, 200);
}

function stopTimer() {
  window.clearInterval(intervalID);
}

nnnnnn s'interroge sur la fréquence des mises à jour. Il faut toutefois garder à l'esprit que la fonction de mise à jour complète n'a pas forcément besoin d'être exécutée 10 fois par seconde. Ma fonction d'horloge, par exemple, lit les cookies avec les paramètres de l'horloge. Il n'est pas souhaitable de lire les cookies 10 fois par seconde. Un cas plus important serait un appel de XMLHttpRequest . Un serveur peut ou non répondre dans un délai de 100 ms.
Pour ces situations, je crée généralement un compteur de tic-tac qui s'incrémente chaque fois que la fonction updateDateAndTime est appelé, et réinitialisé lorsque, par exemple, 100 est atteint. Cela signifie que le compteur de tic-tac est remis à zéro toutes les 10 secondes. C'est une bonne fréquence pour lire les cookies, ou envoyer un XMLHttpRequest . Il suffit de regrouper les fonctions qui n'ont pas besoin d'être exécutées 10 fois par seconde, et de les exécuter à chaque fois que le compteur de tic-tac se remet à zéro.

0voto

Une horloge numérique JavaScript à partir de l'heure du système, peut également être réglée manuellement :-)

 function timer(h,m,s){

 var sec; 
 var min; 
 var hrs; 
 var day;

 if(((s<=59) && (s>=0)) && ((m<=59) && (m>=0)) && ((h<=23) && (h>=0))){

 sec=s; 
 min=m; 
 hrs=h;

 //set parent element id 'lga' to your id 

 var parent = document.getElementById('lga'); 
 parent.innerHTML = '';
 var child = document.createElement('div'); 
 child.id = "thanesh";
 child.style = 'font-size:20px'; 
 parent.appendChild(child);

 setInterval(function(){ 

 sec++;

 if(sec==60){sec=0;min++;}
if(min==60){min=0;hrs++;}
if(hrs==24){hrs = 0; min = 0; sec = 0;}

if(hrs<=12){
day = 'AM';
}else{
day = 'PM';
}

document.getElementById('thanesh').innerHTML = '<table style="background-color:#f5f5f5;"><tr><td><div id="hh">0</div><td>'
                       +hrs+' : <td><div id="mm">0</div><td>'
                       +min+' : <td><div id="ss">0</div><td>'
                       +sec+' <td>'

                       +day+'</td></td></td></td></td></td></td></tr></table>';
if(sec>9){
document.getElementById('ss').style.display = "none";
}else if(sec==0){
document.getElementById('ss').style.display = "block";
}

if(min>9){
document.getElementById('mm').style.display = "none";
}else if(min==0){
document.getElementById('mm').style.display = "block";
}

if(hrs>9){
document.getElementById('hh').style.display = "none";
}else if(hrs==0){
document.getElementById('hh').style.display = "block";
}

},
1000);

}else{
alert("Check time inputs...!");
}
}

//Set Hour, Minutes, Seconds by JS / manually

var date = new Date();

var hst = date.getHours();
var mst = date.getMinutes();
var sst = date.getSeconds();

timer(hst,mst,sst);

0voto

denis hebert Points 103

Étant donné que votre "mise à jour toutes les secondes" de l'horloge réelle est en concurrence avec d'autres tâches informatiques, le délai avant la prochaine mise à jour de l'horloge réelle tique sera inférieure à 1000 ms très souvent . Mieux vaut donc utiliser setTimeout au lieu de setInterval . En fait, il suffit de tordre un peu l'extrémité de l'expression "nié". La solution de 姚先进 ici autour , ce qui se traduit par :

function clk() {
        var a=new Date();   
        document.getElementById("disp").innerHTML=a.getHours() + ":" + a.getMinutes() + ":" + a.getSeconds() ;
        setTimeout(clk, 1000 - a % 1000);
    }

C'est ma solution d'horloge depuis 2007.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X