220 votes

Javascript en minutes et secondes

C'est un problème commun mais je ne sais pas comment le résoudre. Le code ci-dessous fonctionne bien.

 var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);
 

Cependant, quand je parviens à 1 heure ou 3600 secondes, il renvoie 0 minute et 0 seconde. Comment puis-je éviter cela pour qu'il renvoie toutes les minutes?

Merci

402voto

Gumbo Points 279147

Vous le faites mal. Pour obtenir le nombre total de minutes, divisez le nombre total de secondes par 60 (60 secondes/minutes):

var minutes = Math.floor(time / 60);

Et pour obtenir le reste des secondes, multipliez le compte-rendu complet avec 60 et soustrayez le total des secondes:

var seconds = time - minutes * 60;

Maintenant, si vous aussi vous voulez obtenir le plein d'heures de trop, divisez le nombre total de secondes par 3600 (60 minutes/heure · 60 secondes/minutes) d'abord, puis de calculer les secondes restantes:

var hours = Math.floor(time / 3600);
time = time - hours * 3600;

Puis on calcule les minutes et les secondes restantes.

135voto

Vishal Points 4548

Une autre solution de fantaisie:

 // Minutes and seconds
var mins = ~~(time / 60);
var secs = time % 60;

// Hours, minutes and seconds
var hrs = ~~(time / 3600);
var mins = ~~((time % 3600) / 60);
var secs = time % 60;

// Output like "1:01" or "4:03:59" or "123:03:59"
ret = "";

if (hrs > 0)
    ret += "" + hrs + ":" + (mins < 10 ? "0" : "");

ret += "" + mins + ":" + (secs < 10 ? "0" : "");
ret += "" + secs;
return ret;
 

21voto

hamczu Points 1180

Vous pouvez également utiliser l'objet Date natif:

 var date = new Date(null);
date.setSeconds(timeInSeconds);

// retrieve time ignoring the browser timezone - returns hh:mm:ss
var utc = date.toUTCString();
// negative start index in substr does not work in IE 8 and earlier
var time = utc.substr(utc.indexOf(':') - 2, 8)

// retrieve each value individually - returns h:m:s
var time = date.getUTCHours() + ':' + date.getUTCMinutes() + ':' +  date.getUTCSeconds();

// does not work in IE8 and below - returns hh:mm:ss
var time = date.toISOString().substr(11, 8);

// not recommended - only if seconds number includes timezone difference
var time = date.toTimeString().substr(0, 8);
 

Bien sûr, cette solution ne fonctionne que pour le temps en secondes inférieur à 24 heures;)

12voto

Ids Klijnsma Points 1

Pour ajouter des zéros à gauche, je ferais simplement:

 var minutes = "0" + Math.floor(time / 60);
var seconds = "0" + (time - minutes * 60);
return minutes.substring(-2) + ":" + seconds.substring(-2);
 

Gentil et court

0voto

Kamen Kotsev Points 116

Je pensais à un moyen plus rapide pour faire cela et c'est ce que je suis venu avec

 var sec = parseInt(time);
var min=0;
while(sec>59){ sec-=60; min++;}
 

Si nous voulons convertir "heure" en minutes et en secondes, par exemple:

 // time = 75,3 sec
var sec = parseInt(time); //sec = 75
var min=0;
while(sec>59){ sec-=60; min++;} //sec = 15; min = 1
 

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