JavaScript en secondes pour chronométrer la chaîne au format hh: mm: ss


300

Je souhaite convertir une durée, c'est-à-dire un nombre de secondes en chaîne de temps séparée par deux-points (hh: mm: ss)

J'ai trouvé des réponses utiles ici, mais elles parlent toutes de la conversion au format x heures et x minutes.

Y a-t-il donc un petit extrait qui fait cela dans jQuery ou tout simplement du JavaScript brut?


11
Repères de quelques-unes des réponses suggérées dans ce fil. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Réponses:


583
String.prototype.toHHMMSS = function () {
    var sec_num = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(sec_num / 3600);
    var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
    var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

Vous pouvez l'utiliser maintenant comme:

alert("5678".toHHMMSS());

Extrait de travail:


1
Merci pour l'idée du prototype, j'aime la façon dont il est plus facile de l'appeler. J'ai prototypé le numéro pour pouvoir aussi l'appeler sur eux. J'ai également trouvé cette réponse qui supprimerait les heures et les minutes si elles n'étaient pas nécessaires.
alunsford3

21
utiliser l'opérateur "%" >> var minutes = Math.floor ((sec_num% 3600) / 60); var secondes = Math.floor (sec_num% 60);
IvanM

3
Ah merci. Je ne le vois pas fonctionner dans les deux sens comme une chaîne jusqu'à ce que vous appeliez .toString () sur l'entier. vous pouvez le faire fonctionner dans l'autre sens en analysant également
Sonic Soul

51
Ne mettez pas le prototype, faites simplement une fonction utilitaire.
Michael J.Calkins du

15
modifier le prototype pour une telle chose? 390 votes positifs? sérieusement?
Lukas Liesis

198

Vous pouvez gérer cela sans aucune bibliothèque JS externe à l'aide de la méthode JS Date, comme suit:

var date = new Date(0);
date.setSeconds(45); // specify value for SECONDS here
var timeString = date.toISOString().substr(11, 8);
console.log(timeString)


4
Pourquoi cette réponse est-elle si faible? Je l'ai en 2011, probablement IE 7 et 8 étaient la base qui ne le supportera pas, mais c'est fin 2014, donc cette solution simple, simple et sans tracas devrait être bien plus élevée.
Emil Borconi

2
Depuis MDN: si un paramètre que vous spécifiez est en dehors de la plage attendue, setSeconds () tente de mettre à jour les informations de date dans l'objet Date en conséquence. Par exemple, si vous utilisez 100 pour secondsValue, les minutes stockées dans l'objet Date seront incrémentées de 1 et 40 seront utilisées pour les secondes. Alors oui, ça a l'air bien!
Andrew

41
J'aime cette réponse. Il peut être encore plus court: new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik

4
Bonne réponse. Vous pouvez utiliser .replace(/^[0:]+/, "")après substrpour supprimer tous les zéros et :depuis le début de la chaîne.
Palo

1
Ajoutez ceci devant pour gérer le temps sur 24h. parseInt (d / 86400) + "d"
Tofandel

82

Pour obtenir la partie temporelle au format hh:MM:ss, vous pouvez utiliser cette expression régulière:

(Cela a été mentionné ci-dessus dans le même message par quelqu'un, merci pour cela.)

    var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
    console.log(myDate)


8
+1 - Super simple; Merci! Je viens d'utiliser une variante de cela pour afficher uniquement les minutes et les secondes:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio

1
ne devrait-il pas s'agir d'une "nouvelle date (null, null, null, null, null, timeInSecs) .toTimeString (). replace (/.* (\ d {2}:) (\ d {2}: \ d {2 }). * /, "$ 2") "?
obie

6
L'utilisation de replaceest déroutant. Pourquoi ne pas utiliser new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie

4
C'est bien pour afficher une heure donnée, mais notez que la question (et les autres réponses ici) concernent la durée, c'est-à-dire un nombre donné de secondes indépendant de l'heure actuelle.
mahemoff

4
Version plus simple de ceci:new Date().toTimeString().split(" ")[0]
Henrik N

52

Je recommande le javascript ordinaire, en utilisant l'objet Date:

var seconds = 9999;
// multiply by 1000 because Date() requires miliseconds
var date = new Date(seconds * 1000);
var hh = date.getUTCHours();
var mm = date.getUTCMinutes();
var ss = date.getSeconds();
// If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time
// if (hh > 12) {hh = hh % 12;}
// These lines ensure you have two-digits
if (hh < 10) {hh = "0"+hh;}
if (mm < 10) {mm = "0"+mm;}
if (ss < 10) {ss = "0"+ss;}
// This formats your string to HH:MM:SS
var t = hh+":"+mm+":"+ss;
document.write(t);

(Bien sûr, l'objet Date créé aura une date réelle qui lui est associée, mais ces données sont étrangères, donc à ces fins, vous n'avez pas à vous en soucier.)


Il semble faire la date dans le fuseau horaire local, ce qui dans mon cas ajoute 1 heure à l'heure. Avec secondes = 0, j'obtiens "01:00:00" (jeu 01 janv 1970 01:00:00 GMT + 0100 (CET)), ce qui est faux.
mivk

3
J'obtiens un résultat correct si j'utilise date.getUTCHours()et date.getUTCMinutes().
mivk

Je ne comprends pas pourquoi tu retournes un horodatage de 12 heures quand il a demandé une durée?
Nathan C. Tresch

@JellicleCat Changé en +1 et joli nom.
Nathan C. Tresch du

1
J'aime ça, mais cela suppose que la durée est inférieure à 24h
Rory

40

Une recherche Google a révélé ce résultat :

function secondsToTime(secs)
{
    secs = Math.round(secs);
    var hours = Math.floor(secs / (60 * 60));

    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);

    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);

    var obj = {
        "h": hours,
        "m": minutes,
        "s": seconds
    };
    return obj;
}

8
secondsToTime(119.9)=> Object {h: 0, m: 1, s: 60}. Pour résoudre ce problème, ajoutez secs = Math.round(secs);au début de la méthode. Bien sûr, nous avons vu ce bug lors de la démo ...
Benjamin Crouzier

29

Variation sur un thème. Gère les secondes à un chiffre un peu différemment

seconds2time(0)  ->  "0s" 
seconds2time(59) -> "59s" 
seconds2time(60) -> "1:00" 
seconds2time(1000) -> "16:40" 
seconds2time(4000) -> "1:06:40"

function seconds2time (seconds) {
    var hours   = Math.floor(seconds / 3600);
    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
    var seconds = seconds - (hours * 3600) - (minutes * 60);
    var time = "";

    if (hours != 0) {
      time = hours+":";
    }
    if (minutes != 0 || time !== "") {
      minutes = (minutes < 10 && time !== "") ? "0"+minutes : String(minutes);
      time += minutes+":";
    }
    if (time === "") {
      time = seconds+"s";
    }
    else {
      time += (seconds < 10) ? "0"+seconds : String(seconds);
    }
    return time;
}

Merci de m'avoir
épargné

29

Voici mon point de vue:

function formatTime(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = Math.round(seconds % 60);
  return [
    h,
    m > 9 ? m : (h ? '0' + m : m || '0'),
    s > 9 ? s : '0' + s
  ].filter(Boolean).join(':');
}

Résultats attendus:

const expect = require('expect');
expect(formatTime(0)).toEqual('0:00');
expect(formatTime(1)).toEqual('0:01');
expect(formatTime(599)).toEqual('9:59');
expect(formatTime(600)).toEqual('10:00');
expect(formatTime(3600)).toEqual('1:00:00');
expect(formatTime(360009)).toEqual('100:00:09');
expect(formatTime(0.2)).toEqual('0:00');

Vous pouvez écrire ceci: const formatTime = (seconds, h = Math.floor(seconds / 3600), m = Math.floor((seconds % 3600) / 60), s = seconds % 60) => [h, m > 9 ? m : '0' + m, s > 9 ? s : '0' + s].filter(s => s).join(':');
Ruben Stolk

2
@RubenStolk Je trouve un peu déroutant d'avoir une fonction qui accepte deux secondarguments. Je trouve ma version plus claire même si elle est un peu plus verbeuse.
Tom Esterez

seconds: numberannotations de type, en es6?
Olian04

1
La virgule de suivi @pstanton est prise en charge depuis IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Personnellement, je choisis d'ignorer ces anciens navigateurs maintenant. Mais vous avez raison, je l'ai supprimé pour que la réponse soit plus générique.
Tom Esterez

1
Excellente solution. Peut-être juste changer les secondes commeconst s = Math.round(seconds % 60);
Raff

16

J'aime la première réponse. Il y a quelques optimisations:

  • les données source sont un nombre. aucun calcul supplémentaire n'est nécessaire.

  • beaucoup trop d'informatique

Code de résultat:

Number.prototype.toHHMMSS = function () {
    var seconds = Math.floor(this),
        hours = Math.floor(seconds / 3600);
    seconds -= hours*3600;
    var minutes = Math.floor(seconds / 60);
    seconds -= minutes*60;

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

1
Je pense que cette fonction est une fonctionnalité utilisée dans le front et à cet effet je prototype String et non Number. Et Number peut toujours être une chaîne, mais pas l'inverse.
powtac

3
Je pense que Numberc'est juste parce que seconds, en fait, c'est un nombre. vous devez convertir à partir d'une chaîne avant d'utiliser cette fonction, ce qui est la bonne chose à faire!
caesarsol

2
la réponse votée, comme celle-ci, est mauvaise. Je parie que vous n'avez pas besoin de TOUS les numéros pour utiliser cette méthode. Ne modifiez pas le prototype pour des utilitaires aléatoires.
Lukas Liesis

ou juste pour créer un prototype et en faire une fonction numToHHMMSS ou strTOHHMMSS
yeahdixon

Cette solution fonctionne tandis que la solution choisie génère des secondes de 60 pour certaines valeurs.
AndroidDev

14

En utilisant l'incroyable bibliothèque moment.js :

function humanizeDuration(input, units ) { 
  // units is a string with possible values of y, M, w, d, h, m, s, ms
  var duration = moment().startOf('day').add(units, input),
    format = "";

  if(duration.hour() > 0){ format += "H [hours] "; }

  if(duration.minute() > 0){ format += "m [minutes] "; }

  format += " s [seconds]";

  return duration.format(format);
}

Cela vous permet de spécifier n'importe quelle durée (heures, minutes, secondes, fraisages) et renvoie une version lisible par l'homme.


14
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}

Des explications supplémentaires sur les raisons pour lesquelles cette réponse fonctionnerait pour l'interrogateur ou sur ce qui pourrait être erroné dans la question d'origine aideraient à améliorer la qualité de cette réponse.
Josh Burgess

1
Assez explicite et bonne réponse, réduit et simplifie la réponse du haut.
AlexioVay

Réponse précise
:)

11

new Date().toString().split(" ")[4];

résultat 15:08:03


Bien - merci! Et une petite amélioration que j'ai apportée à mes besoins a été de convertir une durée en millisecondes en HH: MM: SS - new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]où elle startTimeavait été définie précédemment en utilisant startTime = new Date().getTime();. (J'ai dû utiliser toUTCString()parce que sinon les temps étaient à une heure.)
Richard Wiseman

10

C'est assez simple,

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}

Cela ne fonctionne que si la durée de votre temps est inférieure à 1 jour. Mais sinon, plutôt sympa.
cjbarth

8
s2t=function (t){
  return parseInt(t/86400)+'d '+(new Date(t%86400*1000)).toUTCString().replace(/.*(\d{2}):(\d{2}):(\d{2}).*/, "$1h $2m $3s");
}

s2t(123456);

résultat:

1d 10h 17m 36s

6

J'ai aimé que Webjins réponde le plus, je l'ai donc étendu aux jours d'affichage avec suffixe publicitaire, rendu l'affichage conditionnel et inclus comme suffixe en quelques secondes:

function sec2str(t){
    var d = Math.floor(t/86400),
        h = ('0'+Math.floor(t/3600) % 24).slice(-2),
        m = ('0'+Math.floor(t/60)%60).slice(-2),
        s = ('0' + t % 60).slice(-2);
    return (d>0?d+'d ':'')+(h>0?h+':':'')+(m>0?m+':':'')+(t>60?s:s+'s');
}

renvoie "3d 16:32:12" ou "16:32:12" ou "32:12" ou "12s"


Ce sera incorrect pour des durées de 24 jours ou plus
Charlie Martin

pourquoi comparez-vous des chaînes supérieures à 0?
Jimmy Kane

@JimmyKane parce que la typographie automatique - j'adore ça! (plus: le code est plus facile à lire (vous avez du transtypage pour une raison, mais arrêtons la pêche à la traîne (nous deux)). plus: la fonction échouerait seulement si t est NaN - donc si vous voulez la sécurité: faites à l'entrée!)
nïkö

@ nïkö Ok je comprends mais de nouvelles versions JS plus strictes, des linters etc. peuvent s'en plaindre. Je dis juste, dong me trompe. J'aime votre réponse
Jimmy Kane

6

J'ai adoré la réponse de Powtac, mais je voulais l'utiliser dans angular.js, j'ai donc créé un filtre en utilisant son code.

.filter('HHMMSS', ['$filter', function ($filter) {
    return function (input, decimals) {
        var sec_num = parseInt(input, 10),
            decimal = parseFloat(input) - sec_num,
            hours   = Math.floor(sec_num / 3600),
            minutes = Math.floor((sec_num - (hours * 3600)) / 60),
            seconds = sec_num - (hours * 3600) - (minutes * 60);

        if (hours   < 10) {hours   = "0"+hours;}
        if (minutes < 10) {minutes = "0"+minutes;}
        if (seconds < 10) {seconds = "0"+seconds;}
        var time    = hours+':'+minutes+':'+seconds;
        if (decimals > 0) {
            time += '.' + $filter('number')(decimal, decimals).substr(2);
        }
        return time;
    };
}])

Il est fonctionnellement identique, sauf que j'ai ajouté un champ décimal facultatif pour afficher les secondes fractionnaires. Utilisez-le comme n'importe quel autre filtre:

{{ elapsedTime | HHMMSS }} affiche: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} affiche: 01:23:45.678


J'ai deux objets datetime et et je veux calculer la différence de cet objet 2 datetime et renvoyer la sortie comme dans ce format: Heure: Minutes: Secondes à deux chiffres comme: 01: 02: 45.Pouvez-vous me le dire ou me guider peu avec votre code ??
Learning-Overthinker-Confused

4

Je pense que sur le plan des performances, c'est de loin le plus rapide:

var t = 34236; // your seconds
var time = ('0'+Math.floor(t/3600) % 24).slice(-2)+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2)
//would output: 09:30:36

Vraiment génial. Félicitations!
Brynner Ferreira

Nice ... et> 24 heures de sécurité.
Jeffz

4
function toHHMMSS(seconds) {
    var h, m, s, result='';
    // HOURs
    h = Math.floor(seconds/3600);
    seconds -= h*3600;
    if(h){
        result = h<10 ? '0'+h+':' : h+':';
    }
    // MINUTEs
    m = Math.floor(seconds/60);
    seconds -= m*60;
    result += m<10 ? '0'+m+':' : m+':';
    // SECONDs
    s=seconds%60;
    result += s<10 ? '0'+s : s;
    return result;
}

Exemples

    toHHMMSS (111); 
    "01:51"

    toHHMMSS (4444);
    "01:14:04"

    toHHMMSS (33);
    "00:33"

Je mettrais aussi Math.floor()les secondes car elles pourraient être données en décimales. (Arrivé avec moi.)
Hiver

3

Voici encore une autre version, qui gère également les jours:

function FormatSecondsAsDurationString( seconds )
{
    var s = "";

    var days = Math.floor( ( seconds / 3600 ) / 24 );
    if ( days >= 1 )
    {
        s += days.toString() + " day" + ( ( days == 1 ) ? "" : "s" ) + " + ";
        seconds -= days * 24 * 3600;
    }

    var hours = Math.floor( seconds / 3600 );
    s += GetPaddedIntString( hours.toString(), 2 ) + ":";
    seconds -= hours * 3600;

    var minutes = Math.floor( seconds / 60 );
    s += GetPaddedIntString( minutes.toString(), 2 ) + ":";
    seconds -= minutes * 60;

    s += GetPaddedIntString( Math.floor( seconds ).toString(), 2 );

    return s;
}

function GetPaddedIntString( n, numDigits )
{
    var nPadded = n;
    for ( ; nPadded.length < numDigits ; )
    {
        nPadded = "0" + nPadded;
    }

    return nPadded;
}

3

Une expression régulière peut être utilisée pour faire correspondre la sous-chaîne d'heure dans la chaîne renvoyée par la toString()méthode de l'objet Date, qui est formatée comme suit: "Thu Jul 05 2012 02:45:12 GMT + 0100 (GMT Daylight Time)". Notez que cette solution utilise le temps depuis l'époque: minuit du 1er janvier 1970. Cette solution peut être une ligne, bien que la diviser la rende beaucoup plus facile à comprendre.

function secondsToTime(seconds) {
    const start = new Date(1970, 1, 1, 0, 0, 0, 0).getTime();
    const end = new Date(1970, 1, 1, 0, 0, parseInt(seconds), 0).getTime();
    const duration = end - start;

    return new Date(duration).toString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

2

Voici comment je l'ai fait. Il semble fonctionner assez bien et il est extrêmement compact. (Il utilise cependant beaucoup d'opérateurs ternaires)

function formatTime(seconds) {
  var hh = Math.floor(seconds / 3600),
    mm = Math.floor(seconds / 60) % 60,
    ss = Math.floor(seconds) % 60;
  return (hh ? (hh < 10 ? "0" : "") + hh + ":" : "") + ((mm < 10) && hh ? "0" : "") + mm + ":" + (ss < 10 ? "0" : "") + ss
}

... et pour formater les chaînes ...

String.prototype.toHHMMSS = function() {
  formatTime(parseInt(this, 10))
};

2

Vous pouvez utiliser la fonction suivante pour convertir le temps (en secondes) au HH:MM:SSformat:

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

Sans passer de séparateur, il utilise :comme séparateur (par défaut):

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

Si vous souhaitez utiliser -comme séparateur, passez-le simplement comme deuxième paramètre:

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

Démo

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

document.body.innerHTML = '<pre>' + JSON.stringify({
    5.3515555 : convertTime(5.3515555),
    126.2344452 : convertTime(126.2344452, '-'),
    1156.1535548 : convertTime(1156.1535548, '.'),
    9178.1351559 : convertTime(9178.1351559, ':'),
    13555.3515135 : convertTime(13555.3515135, ',')
}, null, '\t') +  '</pre>';

Voir aussi ce violon .



1

C'est comme ça que je l'ai fait

function timeFromSecs(seconds)
{
    return(
    Math.floor(seconds/86400)+'d :'+
    Math.floor(((seconds/86400)%1)*24)+'h : '+
    Math.floor(((seconds/3600)%1)*60)+'m : '+
    Math.round(((seconds/60)%1)*60)+'s');
}

timeFromSecs (22341938) renverra '258d 14h 5m 38s'


1

Personnellement, je préfère l'unité de tête (jours, heures, minutes) sans zéros de tête. Mais les secondes doivent toujours être précédées de minutes (0:13), cette présentation est facilement considérée comme de la «durée», sans autre explication (marquage en min, sec (s), etc.), utilisable en plusieurs langues (internationalisation).

    // returns  (-)d.h:mm:ss(.f)
    //          (-)h:mm:ss(.f)
    //          (-)m:ss(.f)
    function formatSeconds (value, fracDigits) {
        var isNegative = false;
        if (isNaN(value)) {
            return value;
        } else if (value < 0) {
            isNegative = true;
            value = Math.abs(value);
        }
        var days = Math.floor(value / 86400);
        value %= 86400;
        var hours = Math.floor(value / 3600);
        value %= 3600;
        var minutes = Math.floor(value / 60);
        var seconds = (value % 60).toFixed(fracDigits || 0);
        if (seconds < 10) {
            seconds = '0' + seconds;
        }

        var res = hours ? (hours + ':' + ('0' + minutes).slice(-2) + ':' + seconds) : (minutes + ':' + seconds);
        if (days) {
            res = days + '.' + res;
        }
        return (isNegative ? ('-' + res) : res);
    }

// imitant le formatage de la durée côté serveur (.net, C #) comme:

    public static string Format(this TimeSpan interval)
    {
        string pattern;
        if (interval.Days > 0)          pattern = @"d\.h\:mm\:ss";
        else if (interval.Hours > 0)    pattern = @"h\:mm\:ss";
        else                            pattern = @"m\:ss";
        return string.Format("{0}", interval.ToString(pattern));
    }

1

Vous pouvez utiliser Momement.js avec un plugin au format moment-durée :

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

Voir aussi ce violon


Fonctionne comme un charme (sauf le format qui n'est pas défini) pour convertir une durée dans un objet avec des mois, jours, heures, minutes et secondes
Pi Home Server

1

const secondsToTime = (seconds, locale) => {
    const date = new Date(0);
    date.setHours(0, 0, seconds, 0);
    return date.toLocaleTimeString(locale);
}
console.log(secondsToTime(3610, "en"));

où le paramètre de paramètres régionaux ("en", "de", etc.) est facultatif


1
secToHHMM(number: number) {
    debugger;
    let hours = Math.floor(number / 3600);
    let minutes = Math.floor((number - (hours * 3600)) / 60);
    let seconds = number - (hours * 3600) - (minutes * 60);
    let H, M, S;
    if (hours < 10) H = ("0" + hours);
    if (minutes < 10) M = ("0" + minutes);
    if (seconds < 10) S = ("0" + seconds);
    return (H || hours) + ':' + (M || minutes) + ':' + (S || seconds);
}

1

Voici un one-liner mis à jour pour 2019:

//your date
var someDate = new Date("Wed Jun 26 2019 09:38:02 GMT+0100") 

var result = `${String(someDate.getHours()).padStart(2,"0")}:${String(someDate.getMinutes()).padStart(2,"0")}:${String(someDate.getSeconds()).padStart(2,"0")}`

//result will be "09:38:02"

Je pense que l'OP veut convertir une durée (secondes) pas un Dateobjet.
mrdaliri

oups, ma mauvaise :(
DataGreed

1

Voici une solution assez simple qui arrondit à la seconde près!

var returnElapsedTime = function(epoch) {
  //We are assuming that the epoch is in seconds
  var hours = epoch / 3600,
      minutes = (hours % 1) * 60,
      seconds = (minutes % 1) * 60;
  return Math.floor(hours) + ":" + Math.floor(minutes) + ":" + Math.round(seconds);
}


1

C'est celui que j'ai écrit récemment pour MM: SS. Ce n'est pas exact à la question, mais c'est un format one-liner différent.

const time = 60 * 2 + 35; // 2 minutes, 35 seconds
const str = (~~(time / 60) + "").padStart(2, '0') + ":" + (~~((time / 60) % 1 * 60) + "").padStart(2, '0');

str // 02:35

Edit: Cela a été ajouté pour plus de variété, mais la meilleure solution ici est https://stackoverflow.com/a/25279399/639679 ci-dessous.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.