JavaScript secondi alla stringa temporale con il formato hh: mm: ss


300

Voglio convertire un intervallo di tempo, ovvero il numero di secondi in una stringa di tempo separata da due punti (hh: mm: ss)

Ho trovato alcune risposte utili qui, ma tutte parlano della conversione in formato x ore e x minuti.

Quindi c'è un piccolo frammento che lo fa in jQuery o solo JavaScript non elaborato?


11
Benchmark di alcune delle risposte suggerite in questa discussione. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Risposte:


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

Puoi usarlo ora come:

alert("5678".toHHMMSS());

Snippet di lavoro:


1
Grazie per l'idea prototipo, mi piace come sia più facile chiamarlo. Ho prototipato il numero in modo da poterlo chiamare anche su di essi. Ho anche trovato questa risposta che rimuoveva le ore e i minuti se non fossero necessari.
alunsford3,

21
usa l'operatore "%" >> var minutes = Math.floor ((sec_num% 3600) / 60); var seconds = Math.floor (sec_num% 60);
IvanM

3
ah grazie. Non lo vedo funzionare in entrambi i modi come stringa finché non chiami .toString () sull'intero. puoi farlo funzionare al contrario analizzando anche int
Sonic Soul il

51
Non mettere sul prototipo, basta fare una funzione di utilità.
Michael J. Calkins,

15
modificare il prototipo per tale cosa? 390 voti positivi? sul serio?
Lukas Liesis,

198

Puoi riuscire a farlo senza alcuna libreria JS esterna con l'aiuto del metodo JS Date come il seguente:

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


4
Perché questa risposta è così bassa? Capisco che nel 2011 probabilmente IE 7 e 8 erano la base che non lo supporterà, ma è la fine del 2014, quindi questa semplice soluzione semplice e senza complicazioni dovrebbe essere molto più alta.
Emil Borconi,

2
Da MDN: se un parametro specificato è al di fuori dell'intervallo previsto, setSeconds () tenta di aggiornare di conseguenza le informazioni sulla data nell'oggetto Date. Ad esempio, se si utilizza 100 per secondsValue, i minuti memorizzati nell'oggetto Date verranno incrementati di 1 e 40 verranno utilizzati per secondi. Quindi sì, sembra buono!
Andrew,

41
Mi piace questa risposta. Può essere ancora più breve: new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik,

4
Bella risposta. È possibile utilizzare .replace(/^[0:]+/, "")after substrper rimuovere tutti gli zero e :dall'inizio della stringa.
Palo,

1
Aggiungi questo davanti per gestire il tempo oltre 24h. parseInt (d / 86400) + "d"
Tofandel,

82

Per ottenere la parte temporale nel formato hh:MM:ss, è possibile utilizzare questa espressione regolare:

(Questo è stato menzionato sopra nello stesso post da qualcuno, grazie per quello.)

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


8
+1 - Super-semplice; Grazie! Ho appena usato una variante di questo per mostrare solo i minuti e i secondi:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio

1
non dovrebbe essere "nuova data (null, null, null, null, null, timeInSecs) .toTimeString (). replace (/.* (\ d {2}:) (\ d {2}: \ d {2 }). * /, "$ 2") "?
obie,

6
L'uso di replaceè confuso. Perché non usare new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie,

4
Questo va bene per mostrare un determinato orario, ma nota che la domanda (e altre risposte qui) riguarda la visualizzazione di una durata, cioè un dato numero di secondi indipendentemente dall'ora corrente.
mahemoff,

4
Versione più semplice di questo:new Date().toTimeString().split(" ")[0]
Henrik N,

52

Raccomando javascript ordinario, usando l'oggetto 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);

(Naturalmente, l'oggetto Date creato avrà una data effettiva associata ad esso, ma quei dati sono estranei, quindi per questi scopi, non devi preoccuparti.)


Sembra rendere la data nel fuso orario locale, che nel mio caso aggiunge 1 ora all'ora. Con secondi = 0, ottengo "01:00:00" (gio 01 gen 1970 01:00:00 GMT + 0100 (CET)), che è sbagliato.
marzo

3
Ottengo un risultato corretto se uso date.getUTCHours()e date.getUTCMinutes().
marzo

Non capisco perché stai restituendo un timestamp di 12 ore quando ti ha chiesto una durata?
Nathan C. Tresch,

@JellicleCat Modificato in +1 e bel nome.
Nathan C. Tresch,

1
Mi piace, ma presume che la durata sia inferiore a 24 ore
Rory,

40

Una ricerca su Google ha mostrato questo risultato :

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}. Per risolvere questo problema, aggiungi secs = Math.round(secs);all'inizio del metodo. Naturalmente, abbiamo visto questo bug durante la demo ...
Benjamin Crouzier,

29

Variazione su un tema. Gestisce i secondi a una cifra in modo leggermente diverso

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

Grazie per avermi risparmiato un'ora su questo
starsinmypockets il

29

Ecco la mia opinione su di esso:

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(':');
}

Risultati aspettati:

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

Puoi scrivere come: 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 Trovo un po 'confuso avere una funzione che accetta due secondargomenti. Trovo la mia versione più chiara anche se è un po 'più dettagliata.
Tom Esterez,

seconds: numberdigitare annotazioni, in es6?
Olian04,

1
La virgola finale di @pstanton è supportata da IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Personalmente scelgo di ignorare quei vecchi browser ora. Ma hai ragione, l'ho rimosso, quindi la risposta è più generica.
Tom Esterez,

1
Ottima soluzione Forse cambia solo i secondi comeconst s = Math.round(seconds % 60);
Raff

16

Mi piace la prima risposta. Ci sono alcune ottimizzazioni:

  • i dati di origine sono un numero. non sono necessari calcoli aggiuntivi.

  • molto eccesso di elaborazione

Codice risultato:

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
Penso che questa funzione sia una funzione usata nel frontespizio e quindi prototipo String e non Number. E Numero può sempre essere una stringa ma non viceversa.
Powtac,

3
Penso che Numbersia giusto perché seconds, in realtà, è un numero. dovresti convertire da stringa prima di usare questa funzione, che è la cosa giusta da fare!
Caesarsol,

2
la risposta votata, proprio come questa, è negativa. Scommetto che non hai bisogno di TUTTI i numeri per avere questo metodo. Non modificare il prototipo per elementi di utilità casuali.
Lukas Liesis,

o semplicemente per prototipare e renderlo una funzione numToHHMMSS o strTOHHMMSS
yeahdixon

Questa soluzione funziona mentre la soluzione scelta genera secondi di 60 per determinati valori.
AndroidDev

14

Utilizzando la straordinaria libreria 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);
}

Ciò consente di specificare qualsiasi durata, ad esempio ore, minuti, secondi, mulini e restituisce una versione leggibile.


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

Ulteriori spiegazioni sul perché questa risposta funzionerebbe per l'interrogante o cosa potrebbe essersi sbagliato nella domanda originale contribuirebbe ad aumentare la qualità di questa risposta.
Josh Burgess,

1
Abbastanza autoesplicativo e buona risposta, ridotta e semplificata la risposta migliore.
AlexioVay

Risposta precisa
:)

11

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

risultato 15:08:03


Bene grazie! E un piccolo miglioramento che ho fatto per le mie esigenze è stato quello di convertire una durata in millisecondi in HH: MM: SS - new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]dove startTimeera stato impostato in precedenza startTime = new Date().getTime();. (Ho dovuto usare toUTCString()perché altrimenti i tempi erano un'ora fuori.)
Richard Wiseman

10

È abbastanza facile

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

Funziona solo se la durata è inferiore a 1 giorno. Ma per il resto, piuttosto carino.
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);

risultato:

1d 10h 17m 36s

6

Mi è piaciuto che Webjins rispondesse di più, quindi l'ho esteso per visualizzare i giorni con il suffisso dell'annuncio, reso condizionato il display e incluso come suffisso in pochi secondi:

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

restituisce "3d 16:32:12" o "16:32:12" o "32:12" o "12s"


Questo non sarà corretto per durate di 24 giorni o più
Charlie Martin

perché stai confrontando stringhe maggiori di 0?
Jimmy Kane,

@JimmyKane perché la tipografia automatica - lo adoro! (in più: il codice è più facile da leggere (hai un typecasting per un motivo, ma smettiamo di trollare (entrambi)). In più: la funzione fallirebbe solo se t è NaN - quindi se vuoi sicurezza: do all'ingresso!)
nïkö

@ nïkö Ok, ho capito, ma le nuove versioni JS più rigide, i linters ecc. possono lamentarsene. Sto solo dicendo, dong, mi sbagli. Mi piace la tua risposta
Jimmy Kane,

6

Ho adorato la risposta di Powtac, ma volevo usarla in angular.js, quindi ho creato un filtro usando il suo codice.

.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;
    };
}])

È funzionalmente identico, tranne per il fatto che ho aggiunto un campo decimale opzionale per visualizzare i secondi frazionari. Usalo come faresti con qualsiasi altro filtro:

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

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


Ho due oggetti datetime e voglio calcolare la differenza di questo oggetto 2 datetime e restituire un output come in questo formato: Ora: minuti: secondi a doppia cifra come: 01: 02: 45. Puoi dirmelo o guidarmi per favore con il tuo codice ??
Apprendimento-Overthinker-Confuso

4

Penso che le prestazioni siano di gran lunga le più veloci:

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

Davvero fantastico. Congratulazioni!
Brynner Ferreira,

Bello ... e> 24 ore al sicuro.
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;
}

Esempi

    toHHMMSS (111); 
    "1:51"

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

    toHHMMSS (33);
    "0:33"

Metterei anche un Math.floor()secondo poiché potrebbero essere dati in decimali. (È successo con me.)
Inverno

3

Ecco un'altra versione, che gestisce anche i giorni:

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

È possibile utilizzare un'espressione regolare per abbinare la sottostringa dell'ora nella stringa restituita dal toString()metodo dell'oggetto Date, che è formattata come segue: "Gio 05 lug 2012 02:45:12 GMT + 0100 (GMT Daylight Time)". Si noti che questa soluzione utilizza il tempo trascorso dall'epoca: la mezzanotte del 1 ° gennaio 1970. Questa soluzione può essere di tipo one-liner, anche se suddividerla rende molto più semplice la comprensione.

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

Ecco come l'ho fatto. Sembra funzionare abbastanza bene ed è estremamente compatto. (Usa molti operatori ternari, però)

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
}

... e per la formattazione delle stringhe ...

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

2

È possibile utilizzare la seguente funzione per convertire il tempo (in secondi) nel HH:MM:SSformato:

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

Senza passare un separatore, utilizza :come separatore (predefinito):

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

Se si desidera utilizzare -come separatore, basta passarlo come secondo parametro:

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

dimostrazione

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

Vedi anche questo violino .



1

È così che l'ho fatto

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) restituirà '258d 14h 5m 38s'


1

Personalmente preferisco l'unità principale (giorni, ore, minuti) senza zeri iniziali. Ma i secondi dovrebbero sempre essere guidati da minuti (0:13), questa presentazione è facilmente considerata come 'durata', senza ulteriori spiegazioni (marcatura come min, sec (s), ecc.), Utilizzabile in varie lingue (internazionalizzazione).

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

// imitando la formattazione della durata lato server (.net, C #) come:

    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

È possibile utilizzare Momement.js con plug -in formato durata del momento :

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>

Vedi anche questo violino


Funziona come un incantesimo (tranne il formato non definito) per convertire una durata in un oggetto con mesi, giorni, ore, minuti e secondi
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"));

dove il parametro locale ("en", "de", ecc.) è facoltativo


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

Ecco un one-liner aggiornato per il 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"

Penso che l'OP voglia convertire una durata (secondi) non un Dateoggetto.
mrdaliri l'

oops, my bad :(
DataGreed

1

Ecco una soluzione abbastanza semplice che arrotonda al secondo più vicino!

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

Questo è quello che ho scritto di recente per MM: SS. Non è esatto alla domanda, ma è un formato di una riga diverso.

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

Modifica: questo è stato aggiunto per varietà, ma la soluzione migliore qui è https://stackoverflow.com/a/25279399/639679 di seguito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.