답변:
당신은 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)
지금까지 최고의 솔루션입니다.
TypeError: Object [object Date] has no method 'clearTime'
.
다음과 같은 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);
new Date(SECONDS * 1000).toISOString().substr(11, 8);
Object doesn't support property or method 'toISOString'
표준 Date 객체의 내장 기능이 수학을 직접 수행하는 것보다 더 편리한 방법 으로이 작업을 수행한다고 생각하지 않습니다.
hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;
예:
0.05
에 hours
변수입니다. 나는 그것을 parseInt
내 경우에 고정 시킨 안에 넣었 지만 그것이 모든 것에 대해 정확하다고는 생각하지 않습니다. 아직도, 이것은 나를 도왔습니다. 그래서 감사합니다!
parseInt
그것을 사용하고 싶지 않습니다. 숫자를 조작하지 않고 문자열 을 구문 분석하는 것 입니다. Math.floor
여기서 관련 작업이 될 것입니다.
seconds = Math.floor(totalSeconds % 60);
. 나는 거기에서도 소수의 결과를 얻었다.
totalSeconds % 60
소수 부분 totalSeconds
이있는 경우 소수 부분 만 가질 수 있습니다 . 정보를 잃을 지 여부는 해당 정보를 잃을 지 또는 유지 하려는지에 따라 다릅니다. (그들은 단지에 종료됩니다 데이터를 삭제하고 있기 때문에 우리가하고있는 다른 바닥 작업은 정보를 잃지 말고 minutes
와 seconds
.)
console.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
나는 이것이 다소 오래되었다는 것을 알고 있지만 ...
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
Cleiton가에서 지적 그의 대답 , moment.js는 이 사용할 수 있습니다 :
moment().startOf('day')
.seconds(15457)
.format('H:mm:ss');
moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss')
.
.format('YYYY DDD HH:mm:ss')
function formatSeconds(seconds)
{
var date = new Date(1970,0,1);
date.setSeconds(seconds);
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
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"
이 기능을 더 짧고 선명하게 만들 수 있지만 가독성은 떨어 지므로 최대한 간단하고 안정적으로 작성합니다.
다음은 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>
누비에 대한 쉬운 버전 :
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);
이 기능은 다음을 수행해야합니다.
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
이 바이올린을 참조하십시오 .
:
이 separator
매개 변수의 기본값으로 설정 되어 있습니다. 이것은 진술에 의해 수행됩니다 typeof separator !== 'undefined' ? separator : ':'
. 또한 귀하의 기능은 일부 외관상의 변경 사항을 저장하는 것과 거의 동일하며 내 버전이 훨씬 더 나은 브라우저 지원을 제외하고는 모두 동일한 출력을 생성해야합니다. 당신은 Internet Explorer 또는 MS 에지 <14의 모든 버전에서 작동하지 않습니다
아래는 초를 hh-mm-ss 형식으로 변환하는 주어진 코드입니다.
var measuredTime = new Date(null);
measuredTime.setSeconds(4995); // specify value of SECONDS
var MHSTime = measuredTime.toISOString().substr(11, 8);
JavaScript 에서 Convert seconds에서 HH-MM-SS 형식으로 대체 방법 가져 오기
의 특별한 경우를 들어 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];
}
+ "." + p.getMilliseconds()
new Date(p.getTime()-o.getTime()).toISOString().split("T")[1].split("Z")[0]
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.
}
}
위의 좋은 답변에 대해 약간의 설명을하고 싶었습니다.
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
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"
... 멋진 원 라이너 접근을 위해 가능한 한 적은 양의 코드를 사용하려고했습니다.
Date 객체에 초를 추가하려고 했습니까?
var dt = new Date();
dt.addSeconds(1234);
샘플 : https://jsfiddle.net/j5g2p0dc/5/
업데이트 됨 : 샘플 링크가 없어서 새로 만들었습니다.
addSeconds
Date 객체와 같은 사용자 정의 메소드 를 사용하고 있음을 공개하지 않은 것 같습니다 Date.prototype.addSeconds = function(seconds){...}
. 예, 업데이트 덕분에 작동합니다.
여기에 powtac의 답변을 기반으로 초를 hh-mm-ss 형식으로 변환하는 기능이 있습니다.
/**
* 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
모든 답변을보고 대부분의 답변에 만족하지 않으면 이것이 내가 생각해 낸 것입니다. 나는 대화에 매우 늦었다는 것을 알고 있지만 여기에 있습니다.
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 문서를 살펴볼 수 있습니다.
이 문제를 해결하는 많은 옵션이 있으며 제안 된 좋은 옵션이 분명히 있습니다. 그러나 여기에 최적화 된 코드를 하나 더 추가하고 싶습니다.
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);
}
한 줄로 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
AngularJS를 사용하는 모든 사람에게 간단한 해결책은 date API를 사용 하여 값을 필터링하는 것입니다.이 API 는 요청 된 형식에 따라 밀리 초를 문자열로 변환합니다. 예:
<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>
이것은 밀리 초를 예상하므로 초에서 변환하는 경우 (원래 질문이 공식화되었으므로) timeRemaining에 1000을 곱하는 것이 좋습니다.
몇 초가 하루 이상인 곳을 언급 한 사례에 부딪쳤다. 다음은 @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'
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());
여기에서 처리 할 수있는 요구 사항을 충족시키는 답변이 없습니다.
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
secondsToTimeSpan(8991)
반환 6.00:05:51
하지만 반품해야한다고 생각합니다00:02:29:51
간단한 시간 범위 객체를 만들기 위해이 코드를 사용했습니다.
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);