compteur de secondes

Le
Y a personne
Bonjour,

J'essaye de créer un genre de compteur de secondes.

Je démarre avec ceci :

var cp= new Date();
cp.setMinutes(0);
cp.setSeconds(0);

var i=1;

Toute les secondes, j'exécute la fonction suivante avec setInterval :
cp.setSeconds(i++);

L'affichage fonctionne très bien la première minute mais après les
minutes du compteur augmente de 1 à chaque seconde

quid ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #765458

L'affichage fonctionne très bien la première minute mais après les
minutes du compteur augmente de 1 à chaque seconde

quid ?


Par hasard, au bout d'une minute i > 60.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Y a personne
Le #765457

L'affichage fonctionne très bien la première minute mais après les
minutes du compteur augmente de 1 à chaque seconde

quid ?


Par hasard, au bout d'une minute i > 60.




oui, mais j'ai utiliser l'objet Date justement pour ne pas devoir faire
tout les if.

D'ailleurs, si je démarre avec cp.setSeconds(63), le compteur commence
bien 1:03

quid ?


YD
Le #765456
L'affichage fonctionne très bien la première minute mais après les
minutes du compteur augmente de 1 à chaque seconde

quid ?
Par hasard, au bout d'une minute i > 60.



oui, mais j'ai utiliser l'objet Date justement pour ne pas devoir faire
tout les if.

D'ailleurs, si je démarre avec cp.setSeconds(63), le compteur commence
bien 1:03

quid ?


Si à ce moment, on interroge avec getSeconds on obtient 3. Si on effectue
alors setSeconds(64), les secondes seront bien mises à 4 mais la minute
changera aussi et passera de 1 (valeur obtenue avec setSeconds(63)) à 2...

La solution devrait plutôt passer par l'utilisation de getSeconds
-- et même plus de i !

--
Y.D.



Francis Spiesser
Le #765454
Il se trouve que Y a personne a formulé :
Bonjour,

J'essaye de créer un genre de compteur de secondes.

Je démarre avec ceci :

var cp= new Date();
cp.setMinutes(0);
cp.setSeconds(0);

var i=1;

Toute les secondes, j'exécute la fonction suivante avec setInterval :
cp.setSeconds(i++);

L'affichage fonctionne très bien la première minute mais après les minutes du
compteur augmente de 1 à chaque seconde

quid ?


cp.setMinutes(0);cp.setSeconds(i++);

Et au bout de 3600 secondes, tu auras le même problème avec les heures

--
______
Francis (enlever .NIPUBNISOUMIS)
"Un four cuit toujours trop ou pas assez. Un micro-onde fait même les
deux à la fois"

Y a personne
Le #765158
Il se trouve que Y a personne a formulé :
Bonjour,

J'essaye de créer un genre de compteur de secondes.

Je démarre avec ceci :

var cp= new Date();
cp.setMinutes(0);
cp.setSeconds(0);

var i=1;

Toute les secondes, j'exécute la fonction suivante avec setInterval :
cp.setSeconds(i++);

L'affichage fonctionne très bien la première minute mais après les
minutes du compteur augmente de 1 à chaque seconde

quid ?


cp.setMinutes(0);cp.setSeconds(i++);

Et au bout de 3600 secondes, tu auras le même problème avec les heures




Et merci, j'ai juste mis ceci dans la fonction setInterval :

cp.setMinutes(0);
cp.setSeconds(i++);

et ça fonctionne très bien, mais honnêtement, je ne comprend pas pourquoi ?


Francis Spiesser
Le #765157
Le 17/10/2007, Y a personne a supposé :


Et merci, j'ai juste mis ceci dans la fonction setInterval :

cp.setMinutes(0);
cp.setSeconds(i++);

et ça fonctionne très bien, mais honnêtement, je ne comprend pas pourquoi ?


C'est simple :

Ton heure initiale est 00:00:00. Tant que tu es inférieur à 60 secondes
(i<60), tu me modifies que les chiffres des secondes :

iX -> 00:00:58
iY -> 00:00:59

mais dès que tu es > 60, cela équivaut à ajouter 1 minute + n secondes
i` -> 00:01:00
ia -> 00:02:01 // à ton heure précedent (ie 00:01:00), tu affectes à
la valeur des secondes 61, c'est à dire 1 seconde + 1 minute)
ib -> 00:03:02
etc.

un autre solution aurait été d'utiliser le modulo pour toujours
"replacer" le paramètres de setSeconds dans un intervalle 1 à 60 :
cp.setSeconds(((i++) % 60)+1)

--
______
Francis (enlever .NIPUBNISOUMIS)
Si la tartine tombe du côté non beurré, vous avez beurré le mauvais
côté.

Olivier Miakinen
Le #765154

cp.setMinutes(0);cp.setSeconds(i++);

Et au bout de 3600 secondes, tu auras le même problème avec les heures


Et merci, j'ai juste mis ceci dans la fonction setInterval :

cp.setMinutes(0);
cp.setSeconds(i++);

et ça fonctionne très bien,


Ça fonctionne très bien sauf que, comme l'écrivait Francis, tu auras le
même problème avec les heures au bout de 3600 secondes.

mais honnêtement, je ne comprend pas pourquoi ?


cp.SetSeconds(n) prend l'heure courante dans cp, en ignore les secondes,
puis ajoute n secondes. Si n est supérieur à 60, forcément tu vas
ajouter des minutes. Si n est supérieur à 3600, tu vas ajouter des heures.

Voici un exemple :

cp = 11 h 27 mn 35 s
cp.SetSeconds(61) = 11 h 27 mn 0 s + 61 s = 11 h 28 mn 1 s.


Y a personne
Le #765153
Le 17/10/2007, Y a personne a supposé :


Et merci, j'ai juste mis ceci dans la fonction setInterval :

cp.setMinutes(0);
cp.setSeconds(i++);

et ça fonctionne très bien, mais honnêtement, je ne comprend pas
pourquoi ?


C'est simple :

Ton heure initiale est 00:00:00. Tant que tu es inférieur à 60 secondes
(i<60), tu me modifies que les chiffres des secondes :

iX -> 00:00:58
iY -> 00:00:59

mais dès que tu es > 60, cela équivaut à ajouter 1 minute + n secondes
i` -> 00:01:00
ia -> 00:02:01 // à ton heure précedent (ie 00:01:00), tu affectes à
la valeur des secondes 61, c'est à dire 1 seconde + 1 minute)
ib -> 00:03:02
etc.

un autre solution aurait été d'utiliser le modulo pour toujours
"replacer" le paramètres de setSeconds dans un intervalle 1 à 60 :
cp.setSeconds(((i++) % 60)+1)




Après une bonne nuit de sommeil, le problème est plus clair...

merci


YD
Le #765150
cp.setMinutes(0);cp.setSeconds(i++);

Et au bout de 3600 secondes, tu auras le même problème avec les heures



Ça fonctionne très bien sauf que, comme l'écrivait Francis, tu auras le
même problème avec les heures au bout de 3600 secondes.

mais honnêtement, je ne comprend pas pourquoi ?


cp.SetSeconds(n) prend l'heure courante dans cp, en ignore les secondes,
puis ajoute n secondes. Si n est supérieur à 60, forcément tu vas
ajouter des minutes. Si n est supérieur à 3600, tu vas ajouter des heures.


Bien que mon premier poste soit resté ignoré, je reviens :-)

Pour éviter tous ces problèmes il suffit sans doute de toujours ajouter
une seconde au temps actuellement stocké :

cp.setSeconds(1 + cp.getSeconds());

--
Y.D.



Olivier Miakinen
Le #765149

Bien que mon premier poste soit resté ignoré, je reviens :-)


Je l'avais lu, et oublié de signaler à Y a personne que tu lui donnais
une solution sans bavure.

Pour éviter tous ces problèmes il suffit sans doute de toujours ajouter
une seconde au temps actuellement stocké :

cp.setSeconds(1 + cp.getSeconds());


Voilà, c'est parfaitement clair.

Publicité
Poster une réponse
Anonyme