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?

medk
la source
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:

powtac
la source
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)

Harish Anchu
la source
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)

Raj
la source
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.)

JellicleCat
la source
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;
}
Ash Burlaczenko
la source
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;
}
jottos
la source
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');
Tom Esterez
la source
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;
}
Serge K.
la source
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.

Pradeep
la source
14
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}
meiyang
la source
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

Artem Kyba
la source
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];
}
Hung Vo
la source
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
Andy Wu
la source
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"

nïkö
la source
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

Mordred
la source
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
Rutger van Baren
la source
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"
mashi
la source
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;
}
M Katz
la source
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");
}
Ninjakannon
la source
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))
};
recrue1024
la source
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 .

John Slegers
la source
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'

dt192
la source
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));
    }
Peter Zehnder
la source
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

Oleksiy Kachynskyy
la source
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

JukkaP
la source
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);
}
Israël
la source
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"
DataGreed
la source
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);
}

CommandoScorch
la source
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.

Matt Kenefick
la source