Конвертировать секунды в HH-MM-SS с JavaScript?

Ответы:

110

Вы не знаете свиданий ? это надо знать.

Используя datejs, просто напишите что-то вроде:

(new Date).clearTime()
          .addSeconds(15457)
          .toString('H:mm:ss');

--Обновить

В настоящее время date.js устарел и не поддерживается, поэтому используйте « Moment.js », что гораздо лучше, как указал TJ Crowder.

- обновление 2

Пожалуйста, используйте @ Frank's решение в одну строку:

new Date(SECONDS * 1000).toISOString().substr(11, 8)

На сегодняшний день это лучшее решение.

Клейтон
источник
11
@Yassir и Cleiton: FWIW, DateJS не поддерживалась годами, и в ней есть пара выдающихся ошибок (хотя, насколько мне известно, они в основном касаются разбора и полуночи). Момент кажется довольно хорошим, и в настоящее время поддерживается.
TJ Crowder
1
@Cleiton, ваш обновленный ответ не полный. Я попробовал это , как это и получилось: TypeError: Object [object Date] has no method 'clearTime'.
Хэмиш Грубиджан
19
Предоставленный Moment.js не так уж и велик, но если все, что вы делаете с ним, - это конвертирование секунд в чч: мм: сс, то это выглядит немного излишним. Скорее используйте одну из функций, предложенных в тех или иных ответах.
Ола Карлссон,
5
Я думаю, что другое решение лучше, чем добавление другой библиотеки js в микс.
Донато
4
Добавление библиотеки для одного простого действия, я думаю, не следует принимать ответ. Да, это работает, но есть лучшие решения !!!
Андрис
405

Вы можете сделать это без какой-либо внешней библиотеки JavaScript с помощью метода JavaScript Date, как показано ниже:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);

Или, согласно комментарию @Frank ; один лайнер:

new Date(SECONDS * 1000).toISOString().substr(11, 8);
Хариш Анчу
источник
39
Я не знаю, почему все добавляют дополнительные библиотеки или делают математику вручную, когда это работает отлично. Спасибо!
Jminardi
98
Это можно даже сократить до одной строки: new Date(SECONDS * 1000).toISOString().substr(11, 8);
Фрэнк
4
Brilliant. Без какой-либо третьей стороны lib. Это лучше всего
Риз
41
Проблема с этим подходом заключается в том, что он будет переполнен через 24 часа, что не позволит вам показать больше, чем этот промежуток времени. Идеальное решение, если у вас есть менее 24 часов в секундах.
Ренато Гама
1
Это не работает для меня в IE11, я получаюObject doesn't support property or method 'toISOString'
NibblyPig
153

Я не думаю, что какая-либо встроенная функция стандартного объекта Date сделает это для вас более удобным способом, чем простая математика.

hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;

Пример:

TJ Crowder
источник
Есть некоторые проблемы с этим, я думаю? Когда я пытался это сделать, я получал десятичные дроби, поэтому 0.05в hoursпеременной вернулось бы 180 секунд . Я положил его внутрь, чтобы parseIntисправить это для моего случая, но я не думаю, что это будет точно для всего. Тем не менее, это помогло мне, так что спасибо!
BT643
@ BT643: Странно, что я не справился с этим. Я сделал это сейчас, вы не хотите использовать parseIntего для анализа строк , а не манипулирования числами. Math.floorбудет соответствующей операцией здесь.
TJ Crowder
1
Ах хорошо! Изменил мой код Хотя вы, вероятно, хотите это и на секундах seconds = Math.floor(totalSeconds % 60);. Я тоже получил там десятичный результат.
BT643
@ BT643: totalSeconds % 60может иметь только дробную часть, если totalSecondsимеет дробную часть. Если вы хотите выступить, это будет зависеть от того, хотите ли вы потерять эту информацию или сохранить ее. (Другие операции на полу, которые мы делаем, не теряют никакой информации, потому что они просто очищают данные, которые в конечном итоге minutesи seconds.)
TJ Crowder
8
@HannounYassirconsole.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
Хави Эстев
60

Я знаю, что это довольно старое, но ...

ES2015:

var toHHMMSS = (secs) => {
    var sec_num = parseInt(secs, 10)
    var hours   = Math.floor(sec_num / 3600)
    var minutes = Math.floor(sec_num / 60) % 60
    var seconds = sec_num % 60

    return [hours,minutes,seconds]
        .map(v => v < 10 ? "0" + v : v)
        .filter((v,i) => v !== "00" || i > 0)
        .join(":")
}

Это выведет:

toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18
Сантьяго Эрнандес
источник
2
Как насчет доли секунды? 03: 45: 45.xxx?
Майк Стоддарт,
1
@ SantiagoHernández Отлично! Теперь это работает отлично в течение 24 часов.
Стефнотч
2
+1. Это или TJ должен быть принятым ответом, поскольку они единственные, которые работают в ситуациях, когда продолжительность превышает 24 часа (и вопрос не ограничивает продолжительность).
Джордж Ю.
38

Как указал Клитон в своем ответе , для этого можно использовать moment.js :

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');
Der Hochstapler
источник
5
Что произойдет, если количество секунд превышает день?
Гилад Пелег,
3
@GiladPeleg, если количество секунд превышает день, количество дней рассчитывается внутри и возвращает только оставшиеся часы, минуты и секунды. Если вы хотите посчитать количество дней, вы можете попробовать moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss').
Elquimista
9
Что произойдет, если количество секунд превышает год?
OrangePot
3
@OrangePot, если количество секунд превышает год, число лет рассчитывается внутренне и возвращает только оставшиеся дни, часы, минуты и секунды. Если вы хотите посчитать количество лет, вы можете попробовать.format('YYYY DDD HH:mm:ss')
Дэвид
1
Но это нельзя сделать необязательным. Это может выглядеть уродливо.
Шедрич
22
function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
Дима Л.
источник
2
formatSeconds (3919); // Возвращает 01:05:19 Отличная функция .. Мне нравится
Самрат Саха
17

Это делает трюк:

function secondstotime(secs)
{
    var t = new Date(1970,0,1);
    t.setSeconds(secs);
    var s = t.toTimeString().substr(0,8);
    if(secs > 86399)
        s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
    return s;
}

(Источник отсюда )

Waggers
источник
12
var  timeInSec = "661"; //even it can be string

String.prototype.toHHMMSS = function () { 
   /* extend the String by using prototypical inheritance */
    var seconds = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(seconds / 3600);
    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
    seconds = seconds - (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;
    return time;
}

alert("5678".toHHMMSS());   // "01:34:38"
console.log(timeInSec.toHHMMSS());   //"00:11:01"

мы можем сделать эту функцию намного короче и четче, но это уменьшает удобочитаемость, поэтому мы напишем ее как можно более простой и стабильной.

или вы можете проверить это, работая здесь :

Sheelpriy
источник
более того ... если ты хочешь делать все, что касается даты и времени, просто .. используй моментJS
Sheelpriy
Спасибо! нет необходимости включать библиотеку в расширение браузера. Просто и работает!
Арло
9

Попробуй это:

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}
Хунг Во
источник
7

Вот расширение класса Number. toHHMMSS () преобразует секунды в строку чч: мм: сс.

Number.prototype.toHHMMSS = function() {
  var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600);
  var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2);
  var seconds = ("00" + (this % 3600) % 60).slice(-2);
  return hours + ":" + minutes + ":" + seconds;
}

// Usage: [number variable].toHHMMSS();

// Here is a simple test
var totalseconds = 1234;
document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS();
// HTML of the test
<div id="timespan"></div>

Мустафа Бурак Калкан
источник
5

Легко следовать версии для новичков:

 var totalNumberOfSeconds = YOURNUMBEROFSECONDS;
 var hours = parseInt( totalNumberOfSeconds / 3600 );
 var minutes = parseInt( (totalNumberOfSeconds - (hours * 3600)) / 60 );
 var seconds = Math.floor((totalNumberOfSeconds - ((hours * 3600) + (minutes * 60))));
 var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
 console.log(result);
ColossalChris
источник
5

Эта функция должна сделать это:

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

Смотрите также эту скрипку .

Джон Слегерс
источник
Может использовать параметры по умолчанию, такие как (input, separator = ":"). Кроме того, ничего не возвращалось, пока я немного не изменил paste.ee/p/FDNag
madprops
@madprops: На самом деле, версия в моем ответе уже установлена :по умолчанию для separatorпараметра, как я уже объяснил. Это сделано заявлением typeof separator !== 'undefined' ? separator : ':'. Кроме того, ваша функция в значительной степени идентична моей, за исключением некоторых косметических изменений, и они оба должны давать одинаковый результат ... за исключением того, что моя версия имеет гораздо лучшую поддержку браузера. Ваша не будет работать в ЛЮБОЙ версии Internet Explorer или MS Edge <14.
Джон
5

ниже приведен код, который преобразует секунды в формат чч-мм-сс:

var measuredTime = new Date(null);
measuredTime.setSeconds(4995); // specify value of SECONDS
var MHSTime = measuredTime.toISOString().substr(11, 8);

Получить альтернативный метод из Конвертировать секунды в формат HH-MM-SS в JavaScript

Фарук Ахамед Моллик
источник
Вы скопировали пасту из этого ответа ?
StefansArya
5

Для особого случая HH: MM: SS.MS (например, «00: 04: 33.637»), используемого FFMPEG для указания миллисекунд .

[-] [HH:] MM: SS [.m ...]

HH выражает количество часов, MM - количество минут максимум для 2 цифр, а SS - количество секунд максимум для 2 цифр. М в конце выражает десятичное значение для СС.

/* HH:MM:SS.MS to (FLOAT)seconds ---------------*/
function timerToSec(timer){
   let vtimer = timer.split(":")
   let vhours = +vtimer[0]
   let vminutes = +vtimer[1]
   let vseconds = parseFloat(vtimer[2])
   return vhours * 3600 + vminutes * 60 + vseconds
}

/* Seconds to (STRING)HH:MM:SS.MS --------------*/
function secToTimer(sec){
  let o = new Date(0)
  let p =  new Date(sec*1000)  
  return new Date(p.getTime()-o.getTime())
    .toISOString()
    .split("T")[1]
    .split("Z")[0]
}

/* Example: 7hours, 4 minutes, 33 seconds and 637 milliseconds */
const t = "07:04:33.637"
console.log(
  t + " => " +
  timerToSec(t) +
  "s"
)

/* Test: 25473 seconds and 637 milliseconds */
const s = 25473.637 // "25473.637"
console.log(
  s + "s => " + 
  secToTimer(s)
)

Пример использования, транспортный таймер в миллисекундах:

/* Seconds to (STRING)HH:MM:SS.MS --------------*/
function secToTimer(sec){
  let o = new Date(0)
  let p =  new Date(sec*1000)  
  return new Date(p.getTime()-o.getTime())
    .toISOString()
    .split("T")[1]
    .split("Z")[0]
}

let job, origin = new Date().getTime()
const timer = () => {
  job = requestAnimationFrame(timer)
  OUT.textContent = secToTimer((new Date().getTime() - origin) / 1000)
}

requestAnimationFrame(timer)
span {font-size:4rem}
<span id="OUT"></span>
<br>
<button onclick="origin = new Date().getTime()">RESET</button>
<button onclick="requestAnimationFrame(timer)">RESTART</button>
<button onclick="cancelAnimationFrame(job)">STOP</button>

Пример использования, связанный с медиа-элементом

/* Seconds to (STRING)HH:MM:SS.MS --------------*/
function secToTimer(sec){
  let o = new Date(0)
  let p =  new Date(sec*1000)  
  return new Date(p.getTime()-o.getTime())
    .toISOString()
    .split("T")[1]
    .split("Z")[0]
}

VIDEO.addEventListener("timeupdate", function(e){
  OUT.textContent = secToTimer(e.target.currentTime)
}, false)
span {font-size:4rem}
<span id="OUT"></span><br>
<video id="VIDEO" width="400" controls autoplay>
  <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>


Вне вопроса эти функции написаны на php:

<?php 
/* HH:MM:SS to (FLOAT)seconds ------------------*/
function timerToSec($timer){
  $vtimer = explode(":",$timer);
  $vhours = (int)$vtimer[0];
  $vminutes = (int)$vtimer[1];
  $vseconds = (float)$vtimer[2];
  return $vhours * 3600 + $vminutes * 60 + $vseconds;
}
/* Seconds to (STRING)HH:MM:SS -----------------*/
function secToTimer($sec){
  return explode(" ", date("H:i:s", $sec))[0];  
}
NVRM
источник
1
Вы можете опустить + "." + p.getMilliseconds(), просто используя new Date(p.getTime()-o.getTime()).toISOString().split("T")[1].split("Z")[0]
JayJay
1
Выглядит хорошо, да ваша версия это быстрее: См бенчмарк jsben.ch/4sQY1 Принято редактировать! Спасибо.
NVRM
4
var time1 = date1.getTime();
var time2 = date2.getTime();
var totalMilisec = time2 - time1;

alert(DateFormat('hh:mm:ss',new Date(totalMilisec)))

 /* ----------------------------------------------------------
 *  Field        | Full Form          | Short Form
 *  -------------|--------------------|-----------------------
 *  Year         | yyyy (4 digits)    | yy (2 digits)
 *  Month        | MMM (abbr.)        | MM (2 digits)
                 | NNN (name)         |
 *  Day of Month | dd (2 digits)      | 
 *  Day of Week  | EE (name)          | E (abbr)
 *  Hour (1-12)  | hh (2 digits)      | 
 *  Minute       | mm (2 digits)      | 
 *  Second       | ss (2 digits)      | 
 *  ----------------------------------------------------------
 */
function DateFormat(formatString,date){
    if (typeof date=='undefined'){
    var DateToFormat=new Date();
    }
    else{
        var DateToFormat=date;
    }
    var DAY         = DateToFormat.getDate();
    var DAYidx      = DateToFormat.getDay();
    var MONTH       = DateToFormat.getMonth()+1;
    var MONTHidx    = DateToFormat.getMonth();
    var YEAR        = DateToFormat.getYear();
    var FULL_YEAR   = DateToFormat.getFullYear();
    var HOUR        = DateToFormat.getHours();
    var MINUTES     = DateToFormat.getMinutes();
    var SECONDS     = DateToFormat.getSeconds();

    var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    var strMONTH;
    var strDAY;
    var strHOUR;
    var strMINUTES;
    var strSECONDS;
    var Separator;

    if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
        strMONTH = "0" + MONTH;
    else
        strMONTH=MONTH;
    if(parseInt(DAY)< 10 && DAY.toString().length < 2)
        strDAY = "0" + DAY;
    else
        strDAY=DAY;
    if(parseInt(HOUR)< 10 && HOUR.toString().length < 2)
        strHOUR = "0" + HOUR;
    else
        strHOUR=HOUR;
    if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2)
        strMINUTES = "0" + MINUTES;
    else
        strMINUTES=MINUTES;
    if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2)
        strSECONDS = "0" + SECONDS;
    else
        strSECONDS=SECONDS;

    switch (formatString){
        case "hh:mm:ss":
            return strHOUR + ':' + strMINUTES + ':' + strSECONDS;
        break;
        //More cases to meet your requirements.
    }
}
bgosalci
источник
4

Я просто хотел дать небольшое объяснение хорошему ответу выше:

var totalSec = new Date().getTime() / 1000;
var hours = parseInt( totalSec / 3600 ) % 24;
var minutes = parseInt( totalSec / 60 ) % 60;
var seconds = totalSec % 60;

var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds  < 10 ? "0" + seconds : seconds);

Во второй строке, поскольку в 1 часе 3600 секунд, мы делим общее количество секунд на 3600, чтобы получить общее количество часов. Мы используем parseInt для удаления любого десятичного числа. Если totalSec был 12600 (3 с половиной часа), то parseInt (totalSec / 3600) вернул бы 3, так как у нас будет 3 полных часа. Зачем нам нужен% 24 в этом случае? Если мы превышаем 24 часа, скажем, у нас есть 25 часов (90000 секунд), то по модулю здесь мы снова вернемся к 1, а не к 25. Это ограничивает результат в пределах 24-часового лимита, так как есть 24 часа В течение одного дня.

Когда вы видите что-то вроде этого:

25 % 24

Думайте об этом так:

25 mod 24 or what is the remainder when we divide 25 by 24
Донато
источник
4

Вовлечение в эту старую ветку - ОП указывал ЧЧ: ММ: СС, и многие решения работают, пока вы не поймете, что вам нужно более 24 часов в списке. И, может быть, вы не хотите больше, чем одну строку кода. Ну вот:

d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)}

Возвращает H +: MM: SS. Чтобы использовать это, просто используйте:

d(91260);     // returns "25:21:00"
d(960);       // returns "0:16:00"

... Я пытался заставить его использовать наименьшее количество кода для хорошего однострочного подхода.

tsizzle
источник
1
Можете ли вы предоставить расширенную / читающую версию своего кода, чтобы мы могли легче видеть, что происходит? Спасибо.
Кимбалл
3

Вы пытались добавить секунды к объекту Date?

var dt = new Date();
dt.addSeconds(1234);

Пример: https://jsfiddle.net/j5g2p0dc/5/

Обновлено: пример ссылки отсутствует, поэтому я создал новую.

kpull1
источник
Uncaught TypeError: dt.addSeconds не является функцией
Ikrom
@Ikrom, проверьте пример, я создал новый в jsfiddle, так как старый вернул ошибку 404
kpull1
Похоже, я не сообщал, что вы использовали пользовательский метод addSecondsдля объекта Date, как Date.prototype.addSeconds = function(seconds){...}. Да, работает, спасибо за обновление.
Икром
2

Вот функция для преобразования секунд в формат чч-мм-сс на основе ответа Powtac здесь

jsfiddle

/** 
 * Convert seconds to hh-mm-ss format.
 * @param {number} totalSeconds - the total seconds to convert to hh- mm-ss
**/
var SecondsTohhmmss = function(totalSeconds) {
  var hours   = Math.floor(totalSeconds / 3600);
  var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60);
  var seconds = totalSeconds - (hours * 3600) - (minutes * 60);

  // round seconds
  seconds = Math.round(seconds * 100) / 100

  var result = (hours < 10 ? "0" + hours : hours);
      result += "-" + (minutes < 10 ? "0" + minutes : minutes);
      result += "-" + (seconds  < 10 ? "0" + seconds : seconds);
  return result;
}

Пример использования

var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10
svnm
источник
2

Посмотрев на все ответы и не обрадовавшись большинству из них, я пришел к этому. Я знаю, что я очень поздно к разговору, но здесь это все равно.

function secsToTime(secs){
  var time = new Date(); 
  // create Date object and set to today's date and time
  time.setHours(parseInt(secs/3600) % 24);
  time.setMinutes(parseInt(secs/60) % 60);
  time.setSeconds(parseInt(secs%60));
  time = time.toTimeString().split(" ")[0];
  // time.toString() = "HH:mm:ss GMT-0800 (PST)"
  // time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"]
  // time.toTimeString().split(" ")[0]; = "HH:mm:ss"
  return time;
}

Я создаю новый объект Date, изменяю время на мои параметры, преобразовываю объект Date в строку времени и удаляю дополнительные элементы, разбивая строку и возвращая только ту часть, которая требуется.

Я думал, что поделюсь этим подходом, так как он устраняет необходимость в регулярных выражениях, логике и математической акробатике для получения результатов в формате «ЧЧ: мм: сс», и вместо этого он опирается на встроенные методы.

Вы можете ознакомиться с документацией здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

luis.madrigal
источник
2

Есть много вариантов решения этой проблемы, и очевидно, что есть хороший вариант, но я хочу добавить еще один оптимизированный код здесь

function formatSeconds(sec) {
     return [(sec / 3600), ((sec % 3600) / 60), ((sec % 3600) % 60)]
            .map(v => v < 10 ? "0" + parseInt(v) : parseInt(v))
            .filter((i, j) => i !== "00" || j > 0)
            .join(":");
}

если вы не хотите форматировать ноль с числом меньше 10, вы можете использовать

function formatSeconds(sec) {
  return parseInt(sec / 3600) + ':' + parseInt((sec % 3600) / 60) + ':' + parseInt((sec % 3600) % 60);

}

Пример кода http://fiddly.org/1c476/1

Amit
источник
2

В одной строке, используя решение TJ Crowder:

secToHHMMSS = seconds => `${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}`

В одной строке другое решение, которое также считает дни:

secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}`

Источник: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276

KaKi87
источник
2
var sec_to_hms = function(sec){
var min, hours;
     sec = sec - (min = Math.floor(sec/60))*60;
     min = min - (hours = Math.floor(min/60))*60;
     return (hours?hours+':':'') + ((min+'').padStart(2, '0')) + ':'+ ((sec+'').padStart(2, '0'));
}
alert(sec_to_hms(2442542));
user40521
источник
1

Вы также можете использовать следующий код:

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;
Мадху С. Капур
источник
1

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

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

Артем Киба
источник
1

Для любого, кто использует AngularJS, простое решение - отфильтровать значение с помощью API даты , который преобразует миллисекунды в строку на основе запрошенного формата. Пример:

<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>

Обратите внимание, что для этого требуются миллисекунды, поэтому вы можете захотеть умножить timeRemaining на 1000, если вы конвертируете из секунд (как был сформулирован исходный вопрос).

Хенрик Кристенсен
источник
1

Я столкнулся с случаем, когда некоторые упоминали, что количество секунд больше дня. Вот адаптированная версия ответа @Harish Anchu с самым высоким рейтингом, который учитывает более длительные периоды времени:

function secondsToTime(seconds) {
  const arr = new Date(seconds * 1000).toISOString().substr(11, 8).split(':');

  const days = Math.floor(seconds / 86400);
  arr[0] = parseInt(arr[0], 10) + days * 24;

  return arr.join(':');
}

Пример:

secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16'
ericgio
источник
1
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("186".toHHMMSS());
Фуад Мекки
источник
1

Ни один из ответов здесь не удовлетворяет моим требованиям, так как я хочу быть в состоянии справиться

  1. Большое количество секунд (дней) и
  2. Отрицательные числа

Несмотря на то, что они не требуются ФП, эффективная практика заключается в том, чтобы охватить крайние случаи, особенно когда это требует небольших усилий.

Совершенно очевидно, что ОП означает НЕСКОЛЬКО секунд, когда он говорит секунды . Зачем привязывать вашу функцию String?

function secondsToTimeSpan(seconds) {
    const value = Math.abs(seconds);
    const days = Math.floor(value / 1440);
    const hours = Math.floor((value - (days * 1440)) / 3600);
    const min = Math.floor((value - (days * 1440) - (hours * 3600)) / 60);
    const sec = value - (days * 1440) - (hours * 3600) - (min * 60);
    return `${seconds < 0 ? '-':''}${days > 0 ? days + '.':''}${hours < 10 ? '0' + hours:hours}:${min < 10 ? '0' + min:min}:${sec < 10 ? '0' + sec:sec}`
}
secondsToTimeSpan(0);       // => 00:00:00
secondsToTimeSpan(1);       // => 00:00:01
secondsToTimeSpan(1440);    // => 1.00:00:00
secondsToTimeSpan(-1440);   // => -1.00:00:00
secondsToTimeSpan(-1);      // => -00:00:01
Duoc Tran
источник
1
secondsToTimeSpan(8991)возвращается, 6.00:05:51тогда как я думаю, что это должно вернуться00:02:29:51
user1063287
0

Я использовал этот код раньше, чтобы создать простой объект timepan:

function TimeSpan(time) {
this.hours = 0;
this.minutes = 0;
this.seconds = 0;

while(time >= 3600)
{
    this.hours++;
    time -= 3600;
}

while(time >= 60)
{
    this.minutes++;
    time -= 60;
}

this.seconds = time;
}

var timespan = new Timespan(3662);
smack0007
источник
1
зацикливание результатов - очень плохая методика кодирования, и ее никогда не следует использовать, так как это приведет к снижению вычислительной мощности и
замедлению работы