356 votes

Convertir les secondes en HH-MM-SS avec JavaScript ?

Comment puis-je convertir des secondes en un HH-MM-SS en utilisant JavaScript ?

3 votes

Voir ma réponse à stackoverflow.com/a/6313008/22470

520voto

Harish Anchu Points 1102

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);

45 votes

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 !

143 votes

Cela peut même être raccourci à une ligne : new Date(SECONDS * 1000).toISOString().substr(11, 8);

5 votes

Brillant. Sans aucune librairie tierce. C'est le meilleur.

346voto

Cleiton Points 4203

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.

0 votes

@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.

1 votes

@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' .

25 votes

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.

201voto

dkreuter Points 980
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);

201voto

T.J. Crowder Points 285826

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);

0 votes

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 !

0 votes

@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.

3 votes

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.

43voto

Oliver Salzburg Points 2455

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');

6 votes

Que se passe-t-il si le nombre de secondes dépasse un jour ?

3 votes

@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') .

10 votes

Que se passe-t-il si le nombre de secondes dépasse une année ?

Prograide.com

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.

Powered by:

X