用JavaScript将秒转换成HH-MM-SS?

如何使用JavaScript将秒转换为HH-MM-SSstring?

你不知道datejs ? 这是一个必须知道的。

使用datejs,只需写下如下内容:

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

–update

如今date.js已经过时了,没有维护,所以使用“ Moment.js ”,这比TJ Crowder指出的要好得多。

您可以使用JavaScriptdate方法,如下所示,设法在没有任何外部JavaScript库的情况下执行此操作:

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

我不认为标准Date对象的任何内置特性都会以比自己做math更方便的方式为你做这件事。

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

正如Cleiton在他的回答中指出的, moment.js可以用于这个:

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

我知道这有点旧,但是…

ES2015:

 var toHHMMSS = (secs) => { var sec_num = parseInt(secs, 10) var hours = Math.floor(sec_num / 3600) % 24 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(13545) // 03:45:45 toHHMMSS(180) // 03:00 toHHMMSS(18) // 00:18 
 function formatSeconds(seconds) { var date = new Date(1970,0,1); date.setSeconds(seconds); return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1"); } 

这是诀窍:

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

(从这里开始 )

尝试这个:

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

这是Number类的扩展。 toHHMMSS()将秒转换为hh:mm:ssstring。

 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 timeInSec = "661"; //even it can be string String.prototype.toHHMMSS = function () { /* extend the String by using prototypical inheritance, so that you can use it to any string directly across all your app. */ 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); var 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()); console.log(timeInSec.toHHMMSS()); 

或者你可以检查这里工作在这里: http : //fiddle.jshell.net/sahilosheal/N2B5J/

下面是将秒转换成hh-mm-ss格式的给定代码:

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

从JavaScript转换秒到HH-MM-SS格式的替代方法

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

这个function应该这样做:

 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 

如果你想使用-作为分隔符,只需将其作为第二个parameter passing:

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

又见这小提琴

在这个老话题里面 – 就是OP说HH:MM:SS,还有很多的解决scheme,直到你意识到你需要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" 

…我试图让它使用尽可能less的代码,为一个很好的单线程的方法。

这里有一个函数可以根据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 

看完所有答案后,大多数人都不满意,这就是我想到的。 我知道我谈话的时间已经很晚了,但是无论如何,

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

我创build一个新的Date对象,将时间更改为我的参数,将Date对象转换为时间string,并通过分割string并仅返回所需的部分来删除附加的东西。

我认为我会分享这种方法,因为它不需要正则expression式,逻辑和math杂技来获得“HH:mm:ss”格式的结果,而是依赖于内置的方法。

你可能想看看这里的文档: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

我之前使用过这个代码来创build一个简单的时间跨度对象:

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

你也可以使用下面的代码:

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

你有没有尝试向Date对象添加秒?

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

示例: http : //fiddle.jshell.net/YvE7x/2/

对于任何使用AngularJS的人来说,一个简单的解决scheme就是使用date API过滤值,该API根据请求的格式将毫秒转换为string。 例:

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

请注意,这需要毫秒,所以如果您从秒转换(如原始问题的制定),您可能需要乘以timeRemaining 1000。

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

结果15:08:03

你也可以用Sugar 。

 Date.create().reset().set({seconds: 180}).format('{mm}:{ss}'); 

这个例子返回'03:00'。

使用momentjs进行单独计算

 var number = 10000(milliseconds); var momentObject = moment.duration(number); var output = momentObject.hours()+"HH"+momentObject.minutes()+"MM"+minuteObject.seconds()+"S"