JavaScript秒到几分钟和几秒钟

这是一个常见的问题,但我不知道如何解决它。 下面的代码工作正常。

var mind = time % (60 * 60); var minutes = Math.floor(mind / 60); var secd = mind % 60; var seconds = Math.ceil(secd); 

但是,当我达到1小时或3600秒,它返回0分钟和0秒。 我怎样才能避免这一点,所以它会返回所有的分钟?

谢谢

你这样做是错的。 要获得完整分钟数,请将总秒数除以60(60秒/分钟):

 var minutes = Math.floor(time / 60); 

为了获得剩下的秒数,将整个分钟乘以60,并从总秒数中减去:

 var seconds = time - minutes * 60; 

现在,如果您也想获得全部小时数,请首先将总秒数除以3600(60分钟/小时·60秒/分钟),然后计算剩余秒数:

 var hours = Math.floor(time / 3600); time = time - hours * 3600; 

然后你计算完整的分钟数和剩下的秒数。

奖金:

使用下面的代码来漂亮地打印时间(由Drubuild议)

 function str_pad_left(string,pad,length) { return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2); 

另一个奇特的解决scheme

 function fancyTimeFormat(time) { // Hours, minutes and seconds var hrs = ~~(time / 3600); var mins = ~~((time % 3600) / 60); var secs = time % 60; // Output like "1:01" or "4:03:59" or "123:03:59" var ret = ""; if (hrs > 0) { ret += "" + hrs + ":" + (mins < 10 ? "0" : ""); } ret += "" + mins + ":" + (secs < 10 ? "0" : ""); ret += "" + secs; return ret; } 

对于希望简单快捷的解决scheme,将秒数格式化为M:SS

 function fmtMSS(s){return(s-(s%=60))/60+(9<s?':':':0')+s} 

做..
该函数接受一个Number (首选) 或者一个String (2个转换“罚分”,你可以通过在函数调用的s参数中fmtMSS(+strSeconds)作为fmtMSS(+strSeconds) ),表示正整数秒s作为参数。

例子:

 fmtMSS( 0 ); // 0:00 fmtMSS( '8'); // 0:08 fmtMSS( 9 ); // 0:09 fmtMSS( '10'); // 0:10 fmtMSS( 59 ); // 0:59 fmtMSS( +'60'); // 1:00 fmtMSS( 69 ); // 1:09 fmtMSS( 3599 ); // 59:59 fmtMSS('3600'); // 60:00 fmtMSS('3661'); // 61:01 fmtMSS( 7425 ); // 123:45 

分解:

 function fmtMSS(s){ // accepts seconds as Number or String. Returns m:ss return( s - // take value s and subtract (will try to convert String to Number) ( s %= 60 ) // the new value of s, now holding the remainder of s divided by 60 // (will also try to convert String to Number) ) / 60 + ( // and divide the resulting Number by 60 // (can never result in a fractional value = no need for rounding) // to which we concatenate a String (converts the Number to String) // who's reference is chosen by the conditional operator: 9 < s // if seconds is larger than 9 ? ':' // then we don't need to prepend a zero : ':0' // else we do need to prepend a zero ) + s ; // and we add Number s to the string (converting it to String as well) } 

注意:负范围可以通过在返回expression式前添加(0>s?(s=-s,'-'):'')+ (实际上, (0>s?(s=-s,'-'):0)+也会起作用)。

您也可以使用本地Date对象:

 var date = new Date(null); date.setSeconds(timeInSeconds); // retrieve time ignoring the browser timezone - returns hh:mm:ss var utc = date.toUTCString(); // negative start index in substr does not work in IE 8 and earlier var time = utc.substr(utc.indexOf(':') - 2, 8) // retrieve each value individually - returns h:m:s var time = date.getUTCHours() + ':' + date.getUTCMinutes() + ':' + date.getUTCSeconds(); // does not work in IE8 and below - returns hh:mm:ss var time = date.toISOString().substr(11, 8); // not recommended - only if seconds number includes timezone difference var time = date.toTimeString().substr(0, 8); 

当然,这个解决scheme只适用于less于24小时的timeInSeconds;)

要添加前导零,我只会这样做:

 var minutes = "0" + Math.floor(time / 60); var seconds = "0" + (time - minutes * 60); return minutes.substr(-2) + ":" + seconds.substr(-2); 

很好,很短

秒到h:mm:ss

 var hours = Math.floor(time / 3600); time -= hours * 3600; var minutes = Math.floor(time / 60); time -= minutes * 60; var seconds = parseInt(time % 60, 10); console.log(hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds)); 

一个class轮(不工作与小时):

  function sectostr(time) { return ~~(time / 60) + ":" + (time % 60 < 10 ? "0" : "") + time % 60; } 

对于添加零,我真的没有看到需要有一个完整的其他function,你可以简单地使用例如

 var mins=Math.floor(StrTime/60); var secs=StrTime-mins * 60; var hrs=Math.floor(StrTime / 3600); RoundTime.innerHTML=(hrs>9?hrs:"0"+hrs) + ":" + (mins>9?mins:"0"+mins) + ":" + (secs>9?secs:"0"+secs); 

这就是为什么我们首先有条件的陈述。

(条件?如果为真:如果为false),所以如果秒的例子超过9比只是显示秒另外添加一个string0之前。

 function secondsToMinutes(time){ return Math.floor(time / 60)+':'+Math.floor(time % 60); } 

你已经做了足够的代码来跟踪时间的几分之一秒。

你可以做的是添加小时的因素在:

 var hrd = time % (60 * 60 * 60); var hours = Math.floor(hrd / 60); var mind = hrd % 60; var minutes = Math.floor(mind / 60); var secd = mind % 60; var seconds = Math.ceil(secd); var moreminutes = minutes + hours * 60 

这会给你你还需要的东西。

我正在考虑一个更快的方式来完成这个工作,这就是我想出来的

 var sec = parseInt(time); var min=0; while(sec>59){ sec-=60; min++;} 

如果我们要将“时间”转换为分钟和秒,例如:

 // time = 75,3 sec var sec = parseInt(time); //sec = 75 var min=0; while(sec>59){ sec-=60; min++;} //sec = 15; min = 1 

我build议另一个解决scheme

 function formatTime(nbSeconds, hasHours) { var time = [], s = 1; var calc = nbSeconds; if (hasHours) { s = 3600; calc = calc / s; time.push(format(Math.floor(calc)));//hour } calc = ((calc - (time[time.length-1] || 0)) * s) / 60; time.push(format(Math.floor(calc)));//minute calc = (calc - (time[time.length-1])) * 60; time.push(format(Math.round(calc)));//second function format(n) {//it makes "0X"/"00"/"XX" return (("" + n) / 10).toFixed(1).replace(".", ""); } //if (!hasHours) time.shift();//you can set only "min: sec" return time.join(":"); }; console.log(formatTime(3500));//58:20 console.log(formatTime(305));//05:05 console.log(formatTime(75609, true));//21:00:09 console.log(formatTime(0, true));//00:00:00 

我知道它已经以多种方式解决了。 我需要这个function的After Effects脚本,其中速度或命名空间污染是不是一个问题。 我把它放在这里是为了一个需要类似东西的人。 我也写了一些testing,工作正常。 所以这是代码:

 Number.prototype.asTime = function () { var hour = Math.floor(this / 3600), min = Math.floor((this - hour * 3600) / 60), sec = this - hour * 3600 - min * 60, hourStr, minStr, secStr; if(hour){ hourStr = hour.toString(), minStr = min < 9 ? "0" + min.toString() : min.toString(); secStr = sec < 9 ? "0" + sec.toString() : sec.toString(); return hourStr + ":" + minStr + ":" + secStr + "hrs"; } if(min){ minStr = min.toString(); secStr = sec < 9 ? "0" + sec.toString() : sec.toString(); return minStr + ":" + secStr + "min"; } return sec.toString() + "sec"; } 

把我的两分钱:

 function convertSecondsToMinutesAndSeconds(seconds){ var minutes; var seconds; minutes = Math.floor(seconds/60); seconds = seconds%60; return [minutes, seconds]; } 

所以这 :

 var minutesAndSeconds = convertSecondsToMinutesAndSeconds(101); 

将有以下输出:

 [1,41]; 

那么你可以这样打印:

 console.log('TIME : ' + minutesSeconds[0] + ' minutes, ' + minutesSeconds[1] + ' seconds'); //TIME : 1 minutes, 41 seconds