Comment puis-je convertir des secondes en un HH-MM-SS
en utilisant JavaScript ?
Je ne sais pas pourquoi tout le monde ajoute des bibliothèques supplémentaires ou fait les calculs manuellement alors que cela fonctionne parfaitement. Merci !
Comment puis-je convertir des secondes en un HH-MM-SS
en utilisant JavaScript ?
Vous pouvez le faire sans bibliothèque JavaScript externe à l'aide de la méthode JavaScript Date comme suit :
var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);
Ou, selon @Frank Le commentaire de l'auteur : une seule phrase :
new Date(SECONDS * 1000).toISOString().substr(11, 8);
Je ne sais pas pourquoi tout le monde ajoute des bibliothèques supplémentaires ou fait les calculs manuellement alors que cela fonctionne parfaitement. Merci !
Cela peut même être raccourci à une ligne : new Date(SECONDS * 1000).toISOString().substr(11, 8);
Mis à jour (2020) :
Veuillez utiliser la solution en une ligne de @Frank :
new Date(SECONDS * 1000).toISOString().substr(11, 8)
C'est de loin la meilleure solution.
Vieille réponse :
Utilisez le Moment.js
bibliothèque.
@J.J. Crowder, vous avez raison. Mais cette réponse a été donnée en 2009, à l'époque c'était une bonne idée. J'ai mis à jour ma réponse.
@Cleiton, votre réponse mise à jour n'est pas complète. Je l'ai essayée telle quelle et j'ai obtenu : TypeError: Object [object Date] has no method 'clearTime'
.
Il est vrai que Moment.js n'est pas si gros, mais si tout ce que vous faites avec lui est de convertir les secondes en hh:mm:ss, cela semble un peu exagéré. Utilisez plutôt l'une des fonctions proposées dans ces réponses ou dans d'autres.
var totalSec = new Date().getTime() / 1000;
var hours = parseInt( totalSec / 3600 ) % 24;
var minutes = parseInt( totalSec / 60 ) % 60;
var seconds = totalSec % 60;
var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds < 10 ? "0" + seconds : seconds);
Je ne pense pas qu'une fonctionnalité intégrée de l'objet Date standard puisse faire cela pour vous d'une manière plus pratique que de faire les calculs vous-même.
hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;
Exemple :
let totalSeconds = 28565;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let seconds = totalSeconds % 60;
console.log("hours: " + hours);
console.log("minutes: " + minutes);
console.log("seconds: " + seconds);
// If you want strings with leading zeroes:
minutes = String(minutes).padStart(2, "0");
hours = String(hours).padStart(2, "0");
seconds = String(seconds).padStart(2, "0");
console.log(hours + ":" + minutes + ":" + seconds);
Il y a des problèmes avec ça, je pense Quand je l'ai essayé, j'obtenais des décimales, donc 180 secondes donnaient 0.05
dans le hours
variable. Je l'ai mis dans un parseInt
ce qui a réglé le problème dans mon cas, mais je ne pense pas que cela soit exact pour tout. Mais cela m'a quand même aidé, alors merci !
@BT643 : C'est bizarre que je ne me sois pas occupé de ça. Je l'ai fait maintenant, vous ne voulez pas utiliser la fonction parseInt
pour ça, c'est pour analyser chaînes de caractères et non pas à manipuler des chiffres. Math.floor
serait l'opération pertinente ici.
Ah, ok ! J'ai changé mon code. Bien que vous le vouliez probablement sur les secondes aussi : seconds = Math.floor(totalSeconds % 60);
. Là aussi, j'ai obtenu un résultat décimal.
Comme l'a souligné Cleiton dans sa réponse , moment.js peut être utilisé à cette fin :
moment().startOf('day')
.seconds(15457)
.format('H:mm:ss');
@GiladPeleg si le nombre de secondes dépasse un jour, le nombre de jours est calculé en interne et il ne retournera que les heures, minutes et secondes restantes. Si vous voulez compter le nombre de jours également, vous pouvez essayer moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss')
.
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.
3 votes
Voir ma réponse à stackoverflow.com/a/6313008/22470