JavaScript를 사용하여 초를 HH-MM-SS로 변환 하시겠습니까?


답변:


109

당신은 datejs 를 모르 십니까 ? 반드시 알아야합니다.

datejs를 사용하여 다음과 같이 작성하십시오.

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

--최신 정보

현재 date.js는 구식이며 유지 관리되지 않으므로 " Moment.js "를 사용하십시오. 이는 TJ Crowder가 지적한 것보다 훨씬 좋습니다.

-업데이트 2

@Frank의 단선 솔루션을 사용하십시오.

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

지금까지 최고의 솔루션입니다.


11
@Yassir and Cleiton : FWIW, DateJS는 몇 년 동안 유지되지 않았으며 몇 가지 뛰어난 버그가 있습니다 (내 지식은 있지만 파싱과 자정과 관련이 있습니다). momentjs 는 꽤 좋아 보이며 현재 유지되고 있습니다.
TJ Crowder

1
@Cleiton, 업데이트 된 답변이 가득 찼습니다. 나는 그것을 그대로 시험해 보았습니다 TypeError: Object [object Date] has no method 'clearTime'.
Hamish Grubijan

19
Granted Moment.js는 그다지 크지 않지만 당신이하고있는 모든 것이 초를 hh : mm : ss로 변환하는 것이라면 약간의 잔인한 것처럼 보입니다. 이 답변이나 다른 답변에서 제안한 기능 중 하나를 사용하십시오.
Ola Karlsson

5
다른 솔루션이 다른 js 라이브러리를 믹스에 던지는 것보다 낫다고 생각합니다.
Donato

4
하나의 간단한 행동을위한 라이브러리 추가 대답은 받아 들여서는 안된다고 생각합니다. 예, 작동하지만 더 나은 솔루션이 있습니다 !!!
Andris

404

다음과 같은 JavaScript Date 메소드를 사용하여 외부 JavaScript 라이브러리 없이이 작업을 수행 할 수 있습니다.

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

4
훌륭한. 타사 라이브러리가 없습니다. 최고
Riz

41
이 방법의 문제점은 24 시간 후에 오버 플로우되어이 시간 이상을 표시 할 수 없다는 것입니다. 24 시간 미만의 시간이 있으면 완벽한 솔루션입니다.
Renato Gama

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;

예:


이것에 몇 가지 문제가 있다고 생각합니까? 나는 그것을 시도 할 때 1백80초가 반환, 그래서 나는 다시 소수를 얻고 있었다 0.05hours변수입니다. 나는 그것을 parseInt내 경우에 고정 시킨 안에 넣었 지만 그것이 모든 것에 대해 정확하다고는 생각하지 않습니다. 아직도, 이것은 나를 도왔습니다. 그래서 감사합니다!
BT643

@ BT643 : 내가 처리하지 않은 이상. 나는 그렇게 했으므로 parseInt그것을 사용하고 싶지 않습니다. 숫자를 조작하지 않고 문자열 을 구문 분석하는 것 입니다. Math.floor여기서 관련 작업이 될 것입니다.
TJ Crowder

1
그래! 내 코드를 변경했습니다. 당신은 아마 초에도 그것을 원하지만 : seconds = Math.floor(totalSeconds % 60);. 나는 거기에서도 소수의 결과를 얻었다.
BT643

@ BT643 : totalSeconds % 60소수 부분 totalSeconds이있는 경우 소수 부분 만 가질 수 있습니다 . 정보를 잃을 지 여부는 해당 정보를 잃을 지 또는 유지 하려는지에 따라 다릅니다. (그들은 단지에 종료됩니다 데이터를 삭제하고 있기 때문에 우리가하고있는 다른 바닥 작업은 정보를 잃지 말고 minutesseconds.)
TJ 크라우

8
@HannounYassirconsole.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
Xavi Esteve

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
1 초의 분수는 어떻습니까? 03 : 45 : 45.xxx?
Mike Stoddart

1
@ SantiagoHernández 위대한! 이제 24 시간 동안 완벽하게 작동합니다.
Stefnotch 2016 년

2
+1. 응답 시간이 24 시간을 초과하는 상황 (및 질문이 지속 시간을 제한하지 않는 경우)에서만 작동하기 때문에이 응답 또는 TJ가 허용되는 답변이어야합니다.
George Y.

38

Cleiton가에서 지적 그의 대답 , moment.js는 이 사용할 수 있습니다 :

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');

5
초 수가 하루를 초과하면 어떻게됩니까?
Gilad Peleg

3
@GiladPeleg 초 수가 하루를 초과하면 일 수는 내부적으로 계산되며 남은 시간, 분 및 초만 반환합니다. 일 수를 세려면을 사용해보십시오 moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss').
elquimista

9
초 수가 1 년을 초과하면 어떻게됩니까?
OrangePot

3
@OrangePot 초 수가 1 년을 초과하면 년 수는 내부적으로 계산되며 나머지 일, 시간, 분 및 초만 반환합니다. 당신도 몇 년을 세고 싶다면, 시도해 볼 수 있습니다.format('YYYY DDD HH:mm:ss')
David Callanan

1
그러나 이것은 선택 사항이 될 수 없습니다. 못 생겼어
shaedrich

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); // Returns 01:05:19 Excellent Function .. Like
Samrat Saha

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

( 여기 에서 출처 )


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"

이 기능을 더 짧고 선명하게 만들 수 있지만 가독성은 떨어 지므로 최대한 간단하고 안정적으로 작성합니다.

또는 여기에서 작동하는지 확인할 수 있습니다 .


또한 ... u는 쉽게 모든 날짜 시간 일을하려면 .. 사용 momentJS
sheelpriy

감사! 브라우저 확장에 라이브러리를 포함 할 필요가 없습니다. 간단하고 작동합니다!
Arlo

9

이 시도:

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

7

다음은 Number 클래스의 확장입니다. toHHMMSS ()는 초를 hh : mm : ss 문자열로 변환합니다.

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

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 에지 <14의 모든 버전에서 작동하지 않습니다
존 Slegers


5

의 특별한 경우를 들어 MM : SS.MS HH (EQ : "00 : 04 : 33.637")에 의해 사용 된 FFMPEG 지정할 수 밀리 초 .

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

HH는 시간 수, MM은 최대 2 자리의 분 수, SS는 최대 2 자리의 초 수를 나타냅니다. 끝에있는 m은 SS의 10 진수 값을 나타냅니다.

/* 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];  
}

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

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 초)이 있다고 가정하면 여기에서 모듈로가 25를 반환하지 않고 다시 1로 다시 이동합니다. 24 시간이 지나서 24 시간 내에 결과를 제한합니다. 하루에.

이 같은 것을 볼 때 :

25 % 24

다음과 같이 생각하십시오.

25 mod 24 or what is the remainder when we divide 25 by 24

4

OP는 HH : MM : SS라고 명시하고 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"

... 멋진 원 라이너 접근을 위해 가능한 한 적은 양의 코드를 사용하려고했습니다.


1
코드의 확장 된 / 읽기 버전을 제공 할 수 있습니까? 감사.
Kimball

3

Date 객체에 초를 추가하려고 했습니까?

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

샘플 : https://jsfiddle.net/j5g2p0dc/5/

업데이트 됨 : 샘플 링크가 없어서 새로 만들었습니다.


잡히지 않은 TypeError : dt.addSeconds는 함수가 아닙니다
Ikrom

@Ikrom은 샘플을 확인, 이전 오류가 404 오류를 반환 한 이후 jsfiddle에 새 샘플을 만들었습니다
kpull1

addSecondsDate 객체와 같은 사용자 정의 메소드 를 사용하고 있음을 공개하지 않은 것 같습니다 Date.prototype.addSeconds = function(seconds){...}. 예, 업데이트 덕분에 작동합니다.
Ikrom

2

여기에 powtac의 답변을 기반으로 초를 hh-mm-ss 형식으로 변환하는 기능이 있습니다.

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

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 객체를 시간 문자열로 변환 한 다음 문자열을 분할하고 필요한 부분 만 반환하여 추가 항목을 제거했습니다.

"HH : mm : ss"형식으로 결과를 얻기 위해 정규식, 논리 및 수학 곡예가 필요하지 않고 대신 내장 메서드에 의존하기 때문에이 방법을 공유한다고 생각했습니다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date 문서를 살펴볼 수 있습니다.


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 이하의 숫자로 0을 포맷하지 않으려면 다음을 사용할 수 있습니다

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

}

샘플 코드 http://fiddly.org/1c476/1


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


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

1

아래 코드를 사용할 수도 있습니다.

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;


1

AngularJS를 사용하는 모든 사람에게 간단한 해결책은 date API를 사용 하여 값을 필터링하는 것입니다.이 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'

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. 음수

OP에는 필요하지 않지만 특히 노력이 거의 들지 않는 경우를 다루는 것이 좋습니다.

그가 라고 말할 때 OP는 NUMBER 초를 의미한다는 것은 분명 합니다. 왜 기능을 사용하지 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

1
secondsToTimeSpan(8991)반환 6.00:05:51하지만 반품해야한다고 생각합니다00:02:29:51
user1063287

0

간단한 시간 범위 객체를 만들기 위해이 코드를 사용했습니다.

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

1
결과를 반복하는 것은 아주 나쁜 코딩 기술이며, 그것은 당신의 처리 능력을 게걸스럽게 당신에게 랙이 사이트 줄 것이다 사용해서는 안됩니다
연의 bellavance
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.