2010-11-09 6 views
0

J'ai commencé à travailler sur une minuterie pour montrer combien de temps les gens ont été sur ma page. Le problème est qu'au lieu de compter les secondes, il continue d'ajouter des zéros à la fin. Quelqu'un peut-il me montrer où je me suis trompé?javascript timer error

<script language="javascript"> 
<!-- 
var seconds = 0 
var minutes = 0 
document.getElementById('timer').innerHTML = '0' 
function Timer() { 
    if (seconds < 10) { 
     seconds = "0" + seconds 
    } 
    else if (minutes < 10) { 
     minutes = "0" + minutes 
    } 
    else if (seconds >= 59){ 
     seconds = 0 
     minutes += 1 
    } 
    else 
     seconds += 1 
     document.getElementById('timer').innerHTML = "You've been on my blog for "+minutes+" : "+seconds+" minutes." 
     setTimeout("Timer()",1000) 
} 
//--> 
</script> 

Répondre

2

Eh bien oui, parce que vous concaténez une chaîne. L'opérateur + effectue à la fois la concaténation et l'ajout.

"0" + foo // concatenate the string "0" and foo 
0 + foo // add foo to 0 (given that both are numbers) 

Vous partez du mauvais temps. Votre script n'est pas garanti pour s'exécuter à l'heure, tout léger retard dans l'exécution vous donnera la valeur erronée accumulative. La bonne façon de faire une minuterie est de prendre un temps de départ fixe et de l'utiliser comme base pour calculer la différence toutes les secondes.

var start = Date.now(); 
function timer() { 
    alert(((Date.now() - start)/1000) + ' seconds elapsed'); 
} 
setInterval(timer, 1000); 
+0

vous m'avez battu. Je vais seulement ajouter que parseInt() vous donnera un int val d'une chaîne si nécessaire. – zzzzBov

+0

Mais j'ajoute un zéro de début aux secondes et minutes jusqu'à ce qu'ils passent dix, donc au lieu de, par exemple cinq minutes et trois secondes étant 5: 3, ce sera 05:03, ne devrait-il pas être un chaîne pour ça? – Tommy

+0

@Tommy Vous devez d'abord suivre correctement ** la valeur numérique **. Le formatage de l'heure avec des zéros en tête est un problème distinct. – deceze

0

Vous changez le type de variable pour les secondes d'être:

var seconds = 0 // integer type 
.... 
seconds = "0" + seconds // now seconds is holding a string! 

secondes (et minutes) ne doivent être des nombres entiers.

De même, faites simplement la mise au point sur les secondes. Plus tard, divisez-le par 60 pour afficher le nombre de minutes. secondes% 60 sera le nombre de secondes restant.