Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

compteur de secondes

13 réponses
Avatar
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 ?

10 réponses

1 2
Avatar
Mickaël Wolff

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

Avatar
Y a personne

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 ?


Avatar
YD
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.



Avatar
Francis Spiesser
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"

Avatar
Y a personne
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 ?


Avatar
Francis Spiesser
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é.

Avatar
Olivier Miakinen

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.


Avatar
Y a personne
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


Avatar
YD
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.



Avatar
Olivier Miakinen

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.

1 2