JavaScript від секунди до часового рядка з форматом hh: mm: ss


300

Я хочу перетворити тривалість часу, тобто кількість секунд у часовий рядок, відокремлений двокрапкою (hh: mm: ss)

Тут я знайшов кілька корисних відповідей, але всі вони говорять про перетворення у формат x годин та х хвилин.

Так чи є крихітний фрагмент, який робить це в jQuery або просто необробленому JavaScript?


11
Орієнтири кількох запропонованих відповідей у ​​цій темі. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Відповіді:


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

Ви можете використовувати його зараз, як:

alert("5678".toHHMMSS());

Робочий фрагмент:


1
Дякую за прототип ідеї, мені подобається, як її легше назвати. Я прототипував номер, щоб я міг називати його і на них. Я також знайшов цю відповідь, яка видалила б години та хвилини, якщо вони не потрібні.
alunsford3

21
використовувати оператор "%" >> var minutes = Math.floor ((sec_num% 3600) / 60); var секунд = Math.floor (sec_num% 60);
ІванМ

3
ах спасибі Я не бачу, що він працює обома способами як рядок, поки ви не викличете .toString () на ціле число. ви можете змусити його працювати навпаки, розбираючи інт
Sonic Soul

51
Не вкладайте прототип, просто зробіть корисну функцію.
Майкл Дж. Калкінс

15
змінити прототип для такої речі? 390 оновлень? серйозно?
Лукас Лейсіс

197

Ви можете це зробити без будь-якої зовнішньої бібліотеки JS за допомогою методу JS Date, наприклад:

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


4
Чому така відповідь така низька? Я розумію, що у 2011 році, ймовірно, IE 7 та 8 був базою, яка не підтримуватиме його, але це кінець 2014 року, тому це просте звичайне рішення, без суєти, повинно бути набагато вище.
Еміль Борконі

2
Від MDN: Якщо вказаний параметр виходить за рамки очікуваного діапазону, setSeconds () намагається відповідно оновити інформацію про дату в об’єкті Date. Наприклад, якщо ви використовуєте 100 для секундValue, хвилини, що зберігаються в об'єкті Date, будуть збільшені на 1, а 40 - на секунди. Так що так, добре виглядає!
Андрій

40
Мені подобається ця відповідь. Це може бути ще коротше: new Date(1000 * seconds).toISOString().substr(11, 8).
Богумір Замєчник

4
Гарна відповідь. Ви можете використовувати .replace(/^[0:]+/, "")після, substrщоб видалити всі нулі та :з початку рядка.
Пало

1
Додайте це попереду, щоб обробити час понад 24 години. parseInt (d / 86400) + "d"
Тофандель

82

Щоб отримати частину часу у форматі hh:MM:ss, ви можете використовувати цей регулярний вираз:

(Про це згадував хтось вище в тому самому дописі, дякую за це.)

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


8
+1 - надпросте; Дякую! Щойно використали варіант цього, щоб показати лише хвилини та секунди:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Тофер Фангіо

1
чи не повинна це бути "new Date (null, null, null, null, null, timeInSecs) .toTimeString (). Замінити (/.* (\ d {2}:)) }). * /, "$ 2") "?
obie

6
Використання replaceзаплутане. Чому б не використовувати new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie

4
Це добре для показу заданого часу, але зауважте, що питання (та інші відповіді тут) стосуються показу тривалості, тобто заданої кількості секунд, незалежно від поточного часу.
mahemoff

4
Простіша версія цього:new Date().toTimeString().split(" ")[0]
Henrik N

52

Я рекомендую звичайний javascript, використовуючи об'єкт 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);

(Звичайно, у створеного об’єкта Date буде пов’язана фактична дата, але ці дані є сторонніми, тому для цих цілей вам не доведеться турбуватися про це.)


Здається, дату вносять у місцевий часовий пояс, що в моєму випадку додає час на час. З секундами = 0 я отримую "01:00:00" (Чт. 01 січня 1970 01:00:00 GMT + 0100 (CET)), що неправильно.
mivk

3
Я отримую правильний результат, якщо використовую date.getUTCHours()і date.getUTCMinutes().
mivk

Я не розумію, чому ви повертаєте часову позначку 12 годин, коли він запитував тривалість?
Nathan C. Tresch

@JellicleCat Змінено на +1 та приємне ім’я.
Nathan C. Tresch

1
Мені це подобається, але припускаємо, що тривалість становить менше 24 годин
Rory

40

Пошук Google виявив цей результат :

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}. Щоб виправити це, додайте secs = Math.round(secs);на початку методу. Звичайно, ми бачили цю помилку під час демонстрації ...
Бенджамін Крузьє

29

Варіація на тему. Однозначна секунда справляється трохи інакше

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

Дякуємо, що
заощадили

29

Ось мій погляд на це:

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

Очікувані результати:

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

Ви можете написати це так: 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(':');
Рубен Столк

2
@RubenStolk Я вважаю трохи заплутаним функцію, яка бере два secondаргументи. Я вважаю свою версію більш зрозумілою, навіть якщо вона дещо докладніша.
Том Естерез

seconds: numberвведіть анотації, в es6?
Olian04

1
@pstanton кома підтримується з IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Я особисто вирішу ігнорувати ці старі браузери зараз. Але ти маєш рацію, я її зняв, щоб відповідь була більш загальною.
Том Естерез

1
Прекрасне рішення. Можливо, просто міняйте секунди якconst s = Math.round(seconds % 60);
Рафф

16

Мені подобається перша відповідь. Деякі оптимізації:

  • вихідні дані - це число. додаткові розрахунки не потрібні.

  • багато зайвих обчислень

Код результату:

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
Я думаю, що ця функція є функцією, що використовується в передньому і для цього прототипі я String, а не Number. І число завжди може бути рядком, але не навпаки.
powtac

3
Я думаю, що Numberце правильно, бо secondsнасправді це число. вам слід перетворити з рядка, перш ніж використовувати цю функцію, що правильно робити!
цезарсол

2
відповідь, як і ця, - погана. Б'юсь об заклад, вам не потрібні ВСІ номери, щоб мати цей метод. Не змінюйте прототип для випадкових утиліт.
Лукас Лейсіс

або просто для прототипу і зробити його функцією numToHHMMSS або strTOHHMMSS
yeahdixon

Це рішення працює, поки вибране рішення генерує 60 секунд для певних значень.
AndroidDev

14

Використання дивовижної бібліотеки 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);
}

Це дозволяє вказати будь-яку тривалість, будь то години, хвилини, секунди, фрези та повертає читану людиною версію.


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

Подальше пояснення того, чому ця відповідь спрацює для запитуючого або що, можливо, було неправильним у первісному запитанні, допоможе підвищити якість цієї відповіді.
Джош Берджесс

1
Досить сама пояснювальна та хороша відповідь, скорочена та спрощена відповідь.
AlexioVay

Точна відповідь
:)

11

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

результат 15:08:03


Приємно - спасибі! І невелике вдосконалення, яке я зробив для своїх потреб, полягало в перетворенні тривалості в мілісекундах на HH: MM: SS - new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]там, де startTimeбуло встановлено раніше за допомогою startTime = new Date().getTime();. (Мені довелося скористатися, toUTCString()бо в іншому випадку часи були на годину.)
Річард Вісман

10

Це досить просто,

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

Це працює лише в тому випадку, якщо ваша тривалість часу менше 1 дня. Але в іншому випадку досить приємно.
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);

результат:

1d 10h 17m 36s

6

Мені найбільше сподобалось відповісти Webjins, тому я продовжив його до відображення днів із суфіксом оголошення, зробив умовне відображення та включено як суфікс на звичайні секунди:

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

повертає "3d 16:32:12" або "16:32:12" або "32:12" або "12s"


Це буде неправильним протягом 24 днів або довше
Чарлі Мартін

чому ви порівнюєте рядки більше 0?
Джиммі Кейн

@ JimmyKane, тому що автоматичний набір клавіш - я люблю це! (плюс: код простіший для читання (у вас з'явилася набір тексту з причини, але давайте перестанемо тролінгувати (ми обидва)). плюс: функція буде виходити з ладу, лише якщо t - NaN - тож якщо ви хочете захистити: це на вході!)
nïkö

@ nïkö Добре Я розумію, але більш суворі нові версії JS, лінери тощо можуть скаржитися на це. Тільки кажучи, донь зрозумій мене неправильно. Мені подобається ваша відповідь
Джиммі Кейн

6

Мені сподобалась відповідь Powtac, але я хотів використати її в angular.js, тому створив фільтр, використовуючи його код.

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

Це функціонально ідентично, за винятком того, що я додав у необов'язкове поле десяткових знаків для відображення дробових секунд. Використовуйте його, як і будь-який інший фільтр:

{{ elapsedTime | HHMMSS }} дисплеї: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} дисплеї: 01:23:45.678


У мене є два об'єкти datetime, і я хочу обчислити різницю цього 2-го об'єкта datetime і повернути висновок, як у такому форматі: Година: Хвилини: Секунди з двозначною цифрою, як: 01: 02: 45. Скажіть, будь ласка, скажіть мені чи мало мене з вашим кодом ??
Confused-Overthinker-Confused

4

Я думаю, що ефективність роботи мудра, що це найшвидше:

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

Дійсно дивовижно. Вітаю!
Бріннер Феррейра

Приємно ... і> 24 години безпечно.
Джефф

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

Приклади

    toHHMMSS (111); 
    "01:51"

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

    toHHMMSS (33);
    "00:33"

Я також поклав би Math.floor()на секунди, оскільки вони можуть бути подані у десяткові дроби. (Сталося зі мною.)
Зима

3

Ось ще одна версія, яка також обробляє дні:

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

Регулярний вираз може бути використаний для відповідності підстроці часу у рядку, поверненому з toString()методу об'єкта Date, який форматується таким чином: "Чт 05 липня 2012 02:45:12 GMT + 0100 (GMT Daylight Time)". Зауважте, що це рішення використовує час з епохи: опівночі 1 січня 1970 р. Це рішення може бути однолінійним, хоча розбиття його набагато простіше зрозуміти.

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

Ось як я це зробив. Здається, працює досить добре, і це надзвичайно компактно. (Однак для цього використовується багато потрійних операторів)

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
}

... і для форматування рядків ...

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

2

Ви можете використовувати наступну функцію для перетворення часу (у секундах) на HH:MM:SSформат:

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

Не передаючи роздільник, він використовує :як роздільник (за замовчуванням):

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

Якщо ви хочете використовувати -як роздільник, просто передайте його як другий параметр:

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

Демо

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

Дивіться також цю скрипку .



1

Ось як я це зробив

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) повернеться "258d 14h 5m 38s"


1

Я особисто віддаю перевагу ведучому підрозділу (дні, години, хвилини) без ведучих нулів. Але секунди завжди повинні вестись хвилинами (0:13), ця презентація легко розглядається як "тривалість", без додаткових пояснень (маркування як хв, сек (ів) тощо), яка може використовуватися різними мовами (інтернаціоналізація).

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

// імітація форматування тривалості на стороні сервера (.net, C #) на зразок:

    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

Ви можете використовувати Momement.js з плагіном формату тривалості моменту :

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>

Дивіться також цю скрипку


Працює як шарм (за винятком формату, який не визначений) для перетворення тривалості в об’єкті місяцями, днями, годинами, хвилинами та секундами
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"));

де параметр locale ("en", "de" тощо) необов'язковий


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

Ось оновлений лайнер на 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"

Я думаю, що ОП хоче перетворити тривалість (секунди) не Dateоб'єкт.
mrdaliri

ой, мій поганий :(
DataGreed

1

Ось досить просте рішення, яке кругляє до найближчої секунди!

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

Про це я писав нещодавно для MM: SS. Не точно в питанні, але це інший формат однолінійки.

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

Редагувати: це додано для різноманітності, але найкраще рішення тут https://stackoverflow.com/a/25279399/639679 нижче.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.