Convert seconds to HH-MM-SS with JavaScript?
如何使用JavaScript将秒转换为
您可以使用JavaScript Date方法在没有任何外部JavaScript库的情况下执行此操作,如下所示:
1 2 3 | var date = new Date(null); date.setSeconds(SECONDS); // specify value for SECONDS here var result = date.toISOString().substr(11, 8); |
或者,根据@Frank的评论;一个班轮:
1 | new Date(SECONDS * 1000).toISOString().substr(11, 8); |
我认为标准Date对象的任何内置功能都不会以比自己进行数学运算更方便的方式为您执行此操作。
1 2 3 4 | hours = Math.floor(totalSeconds / 3600); totalSeconds %= 3600; minutes = Math.floor(totalSeconds / 60); seconds = totalSeconds % 60; |
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let totalSeconds = 28565; let hours = Math.floor(totalSeconds / 3600); totalSeconds %= 3600; let minutes = Math.floor(totalSeconds / 60); let seconds = totalSeconds % 60; console.log("hours:" + hours); console.log("minutes:" + minutes); console.log("seconds:" + seconds); // If you want strings with leading zeroes: minutes = String(minutes).padStart(2,"0"); hours = String(hours).padStart(2,"0"); seconds = String(seconds).padStart(2,"0"); console.log(hours +":" + minutes +":" + seconds); |
你不知道datejs吗?这是必须知道的。
使用datejs,只需写下:
1 2 3 | (new Date).clearTime() .addSeconds(15457) .toString('H:mm:ss'); |
--update
现在date.js已经过时而没有维护,所以使用"Moment.js",正如T.J所指出的要好得多。克劳德。
我知道这有点老了,但......
ES2015:
1 2 3 4 5 6 7 8 9 10 11 | 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(":") } |
它将输出:
1 2 3 4 | toHHMMSS(129600) // 36:00:00 toHHMMSS(13545) // 03:45:45 toHHMMSS(180) // 03:00 toHHMMSS(18) // 00:18 |
正如Cleiton在他的回答中指出的那样,moment.js可用于此:
1 2 3 | moment().startOf('day') .seconds(15457) .format('H:mm:ss'); |
1 2 3 4 5 6 | function formatSeconds(seconds) { var date = new Date(1970,0,1); date.setSeconds(seconds); return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1"); } |
这样做的诀窍:
1 2 3 4 5 6 7 8 9 | 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; } |
(来自这里)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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" |
我们可以使这个功能更短更清晰,但这会降低可读性,因此我们将尽可能简单地编写并尽可能稳定。
或者你可以在这里查看这个:
试试这个:
1 2 3 | function toTimeString(seconds) { return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0]; } |
这是Number类的扩展。 toHHMMSS()将秒转换为hh:mm:ss字符串。
1 2 3 4 5 6 7 8 9 10 11 12 | 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(); |
1 | // HTML of the test |
noobies易于遵循的版本:
1 2 3 4 5 6 | 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); |
这个功能应该这样做:
1 2 3 4 5 6 7 8 | 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 : ':' ); } |
在不传递分隔符的情况下,它使用
1 | time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51 |
如果要使用
1 | time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46 |
另见这个小提琴。
我只想对上面的好答案给出一点解释:
1 2 3 4 5 6 | 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小时一天内。
当你看到这样的事情:
1 | 25 % 24 |
可以这样想:
1 | 25 mod 24 or what is the remainder when we divide 25 by 24 |
在这个老线程中说道 - OP说明了HH:MM:SS,并且许多解决方案都有效,直到你意识到你需要超过24小时列出。也许你不需要多行代码。干得好:
1 | 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。要使用它,只需使用:
1 2 | d(91260); // returns"25:21:00" d(960); // returns"0:16:00" |
...我尝试使用尽可能少的代码,以获得一个很好的单行方法。
下面是给定的代码,它将秒转换为hh-mm-ss格式:
1 2 3 | var measuredTime = new Date(null); measuredTime.setSeconds(4995); // specify value of SECONDS var MHSTime = measuredTime.toISOString().substr(11, 8); |
在JavaScript中获取从转换秒到HH-MM-SS格式的替代方法
您是否尝试过添加Date对象?
1 2 | var dt = new Date(); dt.addSeconds(1234); |
一个样品:
https://jsfiddle.net/j5g2p0dc/5/
更新:
样本链接丢失,所以我创建了一个新链接。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 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. } } |
1 2 3 4 5 6 7 | 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)); |
在一行中,使用T.J.克劳德的解决方案:
1 | secToHHMMSS = seconds => `${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}` |
在一行中,另一个也计算天数的解决方案:
1 | secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}` |
资料来源:https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276
这是一个根据powtac的答案将秒转换为hh-mm-ss格式的功能
的jsfiddle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** * 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; } |
使用示例
1 2 3 | var seconds = SecondsTohhmmss(70); console.log(seconds); // logs 00-01-10 |
解决这个问题有很多选择,很明显有很好的选择,但我想在这里添加一个更优化的代码
1 2 3 4 5 6 | 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个数字,你可以使用
1 2 | function formatSeconds(sec) { return parseInt(sec / 3600) + ':' + parseInt((sec % 3600) / 60) + ':' + parseInt((sec % 3600) % 60); |
}
示例代码http://fiddly.org/1c476/1
在查看了所有答案并且对大多数答案都不满意之后,这就是我想出来的。我知道我的谈话已经很晚了,但无论如何它都在这里。
1 2 3 4 5 6 7 8 9 10 11 12 | 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
对于使用AngularJS的任何人来说,一个简单的解决方案是使用date API过滤值,该API根据请求的格式将毫秒转换为字符串。例:
1 | Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }} |
请注意,这需要毫秒,因此如果您从秒转换(因为原始问题已经制定),您可能希望将timeRemaining乘以1000。
这里的答案都没有满足我的要求,因为我希望能够处理
虽然OP不需要这些,但是覆盖边缘情况是一种很好的做法,特别是在需要很少工作的情况下。
很明显,当他说秒时,OP意味着数秒。为什么要将你的功能挂在
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
结果
我碰到了一些人提到的案例,其中秒数超过一天。这是@Harish Anchu最受欢迎的答案的改编版本,可以解释更长的时间:
1 2 3 4 5 6 7 8 | 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(':'); } |
例:
1 | secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16' |
您还可以使用以下代码:
1 2 3 4 | int ss = nDur%60; nDur = nDur/60; int mm = nDur%60; int hh = nDur/60; |
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
用法示例
1 | alert("186".toHHMMSS()); |
也许是这样的:
1 2 3 4 5 6 7 8 9 10 11 | var Convert = function (time) { const HOUR = 60 * 60; const MINUTE = 60; var minutesInSeconds = time % HOUR; var hours = Math.floor(time / HOUR); var minutes = Math.floor(minutesInSeconds / MINUTE) var seconds = minutesInSeconds % MINUTE; return hours.padStart(2, 0) + ':' + minutes.padStart(2, 0) + ':' + seconds.padStart(2, 0); } |
我之前使用过这段代码来创建一个简单的时间跨度对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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); |
你也可以使用Sugar。
1 | Date.create().reset().set({seconds: 180}).format('{mm}:{ss}'); |
此示例返回'03:00'。
使用momentjs进行单一计算
1 2 3 4 | var number = 10000(milliseconds); var momentObject = moment.duration(number); var output = momentObject.hours()+"HH"+momentObject.minutes()+"MM"+minuteObject.seconds()+"S" |
使用Moment.js:
1 | moment().format('hh:mm:ss'); |