J'ai essayé de décortiquer ce que tu as fais (au passage merci d'avoir fait une proposition)
Ici tu calcules le temps restant du chrono en ms en additionnant le nb de ms depuis le 1er janvier 1970 + la durée du chrono en ms
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.timeEnd = Date.now() + this.duree;
donc: temps restant du chrono = nb de ms depuis le 1er janvier 1970 + durée du chrono en ms
Ensuite la variable iTimer contenant la valeur 'null' (c'est à dire aucune valeur) est égale à la fonction setInterval qui va déclencher répétitivement la même action sur decompteTimer (toute les 1000ms, action)
donc : valeur null du chrono = action déclenché toute les 1000 ms sur la méthode decompteTimer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 this.iTimer = setInterval(() => { this.decompteTimer(); }, 1000);
Ensuite la fonction stopTimer va stopper la répétition à interval régulier de decompteTimer (donc stopper le chrono)
donc : arrêt du chrono = stopper l'action déclenché toute les 1000ms sur la méthode decompteTimer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 stopTimer() { clearInterval(this.iTimer); }
Ensuite la méthode décompteTimer:
Si j'ai bien compris , la fonction math.ceil retourne le plus petit entier supérieur ou égal au nb donné (ref: MDN)
Code : Sélectionner tout - Visualiser dans une fenêtre à part const reste = Math.ceil((this.timeEnd - Date.now()) / 1000);
donc tu as fais: temps restant = (temps restant à la fin du chrono en ms - le nb de ms depuis le 1er janvier 1970) / 1000. (je suppose que la division par 1000 est pour retrouver une valeur en seconde (ms / 1000)
Donc s'il reste 15 minutes au chrono, tu calcul le temps restant (15 minutes) moins le nb de ms depuis le 1er janvier 1970 ? (donc par ex 15 min - 290348534905384ms ?)
(Si je me trompe dans ma formulation merci de me corriger)
Après tu poses une condition :
si le temps restant est supérieur à 0, tu calcules le reste de la division entre le temps restant / 3600, le tout divisé par 60 (par contre je n'ai pas compris le 10, et le slice(-2), j'ai regardé, mais je n'ai pas compris l'utilisation de slice dans ce cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (reste > 0) { // formatage de la sortie, plein de façon de faire // ou avec String(number).padStart(2, "00"); const h = ("00" + parseInt(reste / 3600, 10)).slice(-2); const m = ("00" + parseInt((reste % 3600) / 60, 10)).slice(-2); const s = ("00" + parseInt(Math.ceil((reste % 3600) % 60), 10)).slice(-2);
Je crois que l'utilisation de date.now() est encore un peu flou pour moi. car quand je lis les calculs je trouve ça étrange. Est -ce que la fonction date.now() n'est pas en réalité le fuseau horaire actuel c'est à dire par ex: 30/06/20 , 11:10 et 34 secondes ?
dans ce cas, tu fais tes calculs en fonction du fuseau horaire actuel ?
Je pense que si je comprends cela, je serais en mesure de comprendre ton code.
Partager