Javascript秒到分钟和秒

时间:2010-09-17 06:51:38

标签: 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秒。如何避免这种情况,以便返回所有分钟?

由于

29 个答案:

答案 0 :(得分:280)

要获得完整分钟数,请将总秒数除以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;

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

加成:

使用以下代码来打印时间(由Dru建议)

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

答案 1 :(得分:82)

另一种奇特的解决方案:

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

~~Math.floor的简写,有关详细信息,请参阅this link

答案 2 :(得分:58)

对于那些希望快速简单且因此简短的解决方案,将秒格式化为M:SS的人:

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

完成..
该函数接受 一个Number(首选)一个String(2个转换'惩罚',你可以通过预先{{1}来减半在+的函数调用参数中,如:s),表示正整数秒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) } 添加到返回表达式来添加负范围(实际上,(0>s?(s=-s,'-'):'')+也可以。)

答案 3 :(得分:18)

您还可以使用本机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);

当然这个解决方案仅适用于不到24小时的timeInSeconds;)

答案 4 :(得分:11)

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

答案 5 :(得分:11)

2020更新

使用基本数学和简单的javascript,只需几行代码即可完成

示例-将7735 seconds转换为HH:MM:SS


MATH:

计算使用:

  1. Math.floor()-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

Math.floor()函数返回小于或等于给定数字的最大整数。

  1. %算术运算符(余数)-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder

一个操作数除以第二个操作数时,余数运算符返回剩余的余数。它总是带有分红的迹象。

在下面查看代码。秒数除以3600得到小时数和余数,用于计算分钟数和秒数。

HOURS => 7735 / 3600 = 2 remainder 535

MINUTES => 535 / 60 = 8 remainder 55

SECONDS => 55


领先的ZEROS:

这里的许多答案都使用复杂的方法以正确的方式显示小时,分钟和秒数,并且前导零-4504等。可以使用padStart()来完成。这适用于字符串,因此必须使用toString()将数字转换为字符串。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

padStart()方法用另一个字符串(如果需要,可以多次)填充当前字符串,直到结果字符串达到给定的长度。从当前字符串的开头开始应用填充。


代码:

function secondsToTime(e){
    var h = Math.floor(e / 3600).toString().padStart(2,'0'),
        m = Math.floor(e % 3600 / 60).toString().padStart(2,'0'),
        s = Math.floor(e % 60).toString().padStart(2,'0');
    
    return h + ':' + m + ':' + s;
}

console.log(secondsToTime(7735));  //02:08:55

/*
secondsToTime(SECONDS) => HH:MM:SS 

secondsToTime(8)       => 00:00:08 
secondsToTime(68)      => 00:01:08
secondsToTime(1768)    => 00:29:28
secondsToTime(3600)    => 01:00:00
secondsToTime(5296)    => 01:28:16
secondsToTime(7735)    => 02:08:55
secondsToTime(45296)   => 12:34:56
secondsToTime(145296)  => 40:21:36
secondsToTime(1145296) => 318:08:16
*/

答案 6 :(得分:10)

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

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

好又短

答案 7 :(得分:7)

Moment.js

如果您使用的是 enter image description here ,则可以使用内置的Duration对象

const duration = moment.duration(4825, 'seconds');

const h = duration.hours(); // 1
const m = duration.minutes(); // 20
const s = duration.seconds(); // 25

答案 8 :(得分:6)

2019最佳变体

格式化hh:mm:ss

console.log(display(60 * 60 * 2.5 + 25)) // 2.5 hours + 25 seconds

function display (seconds) {
  const format = val => `0${Math.floor(val)}`.slice(-2)
  const hours = seconds / 3600
  const minutes = (seconds % 3600) / 60

  return [hours, minutes, seconds %= 60].map(format).join(':')
}

答案 9 :(得分:5)

一个班轮(几小时不起作用):

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

答案 10 :(得分:3)

秒到......: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));

答案 11 :(得分:2)

我发现的最简洁的方法可以只用一行来完成:

let timeString = `${timeInSeconds/60|0}:${timeInSeconds%60}`

说明

`${...}`
Template literals。允许将表达式从字符串本身内部转换为字符串。
注意:与IE不兼容。

timeInSeconds/60|0
秒,然后转换为分钟(/60)。这给出一个有理数。从这里使用bitwise OR|0)截断

timeInSeconds%60
Remainder (modulo)。给出变量的余数除以60。


小时

此方法可以扩展为包括以下时间:

let timeString = `${timeInSeconds/60/60|0}:${timeInSeconds/60%60|0}:${timeInSeconds%60}`

重复此过程,您甚至可以添加几天。

答案 12 :(得分:2)

以下功能将帮助您获取天,时,分,秒

toDDHHMMSS(inputSeconds){
        const Days = Math.floor( inputSeconds / (60 * 60 * 24) );
        const Hour = Math.floor((inputSeconds % (60 * 60 * 24)) / (60 * 60));
        const Minutes = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) / 60 );
        const Seconds = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) % 60 );
        let ddhhmmss  = '';
        if (Days > 0){
            ddhhmmss += Days + ' Day ';
        }
        if (Hour > 0){
            ddhhmmss += Hour + ' Hour ';
        }

        if (Minutes > 0){
            ddhhmmss += Minutes + ' Minutes ';
        }

        if (Seconds > 0){
            ddhhmmss += Seconds + ' Seconds ';
        }
        return ddhhmmss;
    }
alert( toDDHHMMSS(2000));

答案 13 :(得分:2)

  function formatSeconds(s: number) {
    let minutes = ~~(s / 60);
    let seconds = ~~(s % 60);
    return minutes + ':' + seconds;
  }

答案 14 :(得分:2)

另一个但更优雅的解决方案如下:

/**
 * Convert number secs to display time
 *
 * 65 input becomes 01:05.
 *
 * @param Number inputSeconds Seconds input.
 */
export const toMMSS = inputSeconds => {
    const secs = parseInt( inputSeconds, 10 );
    let minutes = Math.floor( secs / 60 );
    let seconds = secs - minutes * 60;

    if ( 10 > minutes ) {
        minutes = '0' + minutes;
    }
    if ( 10 > seconds ) {
        seconds = '0' + seconds;
    }

    // Return display.
    return minutes + ':' + seconds;
};

答案 15 :(得分:2)

使用ES6清洁一根衬管

echo '<table>';
echo '<tr><th>lev1</th><th>lev2</th><th>lev3</th><th>lev4</th></tr>';
foreach ($categoriesResult as $titles) {
    echo "<tr><td>{$titles->lev1}</td><td>{$titles->lev2}</td><td>{$titles->lev3}</td><td>{$titles->lev4}</td></tr>";
}
echo '</table>';

答案 16 :(得分:1)

毕竟,还有另一个简单的解决方案:

const time = new Date(null);
time.setSeconds(7530);
console.log(time.getHours(), time.getMinutes(), time.getSeconds());

答案 17 :(得分:1)

var seconds = 60;
var measuredTime = new Date(null);
measuredTime.setSeconds(seconds); // specify value of SECONDS
var Time = measuredTime.toISOString().substr(11, 8);
document.getElementById("id1").value = Time;
<div class="form-group">
  <label for="course" class="col-md-4">Time</label>
  <div class="col-md-8">
    <input type="text" class="form-control" id="id1" name="field">Min
  </div>
</div>

答案 18 :(得分:1)

为了添加零,我真的不认为需要一个完整的其他功能,你可以简单地使用例如

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

为什么我们首先要有条件陈述。

(条件?如果为真:如果为假)所以如果示例秒数大于9而不仅仅是显示秒数,那么在它之前添加一个字符串0。

答案 19 :(得分:0)

我更喜欢将毫秒视为自己的单位,而不是毫秒的子单位 其他的东西。在这种情况下,它将具有0-999的值,因此您将 想要像我在其他答案中看到的那样填充三个而不是两个。这是 一个实现:

function format(n) {
   let mil_s = String(n % 1000).padStart(3, '0');
   n = Math.trunc(n / 1000);
   let sec_s = String(n % 60).padStart(2, '0');
   n = Math.trunc(n / 60);
   return String(n) + ' m ' + sec_s + ' s ' + mil_s + ' ms';
}

Install app for user

答案 20 :(得分:0)

Day.js

如果你使用 day.js,试试这个。

const dayjs = require('dayjs')
const duration = require('dayjs/plugin/duration') 
dayjs.extend(duration)

const time = dayjs.duration(100, 'seconds')

time.seconds() // 40
time.minutes() // 1
time.format('mm:ss') // 01:40

答案 21 :(得分:0)

试试这个: 将第二个转换为HOURS,MIN和SEC。

function convertTime(sec) {
    var hours = Math.floor(sec/3600);
    (hours >= 1) ? sec = sec - (hours*3600) : hours = '00';
    var min = Math.floor(sec/60);
    (min >= 1) ? sec = sec - (min*60) : min = '00';
    (sec < 1) ? sec='00' : void 0;

    (min.toString().length == 1) ? min = '0'+min : void 0;    
    (sec.toString().length == 1) ? sec = '0'+sec : void 0;    

    return hours+':'+min+':'+sec;
}

答案 22 :(得分:0)

export function TrainingTime(props) {
    const {train_time } = props;
    const hours = Math.floor(train_time/3600);
    const minutes = Math.floor((train_time-hours * 3600) / 60);
    const seconds = Math.floor((train_time%60));

    return `${hours} hrs  ${minutes} min  ${seconds} sec`;
}

答案 23 :(得分:0)

把我的两分钱放进去:

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

答案 24 :(得分:0)

我知道它已经在很多方面得到了解决。我需要这个函数用于After Effects脚本,其中速度或命名空间污染不是问题。我把它放在这里需要类似的东西。我也写了一些测试并且运行良好。所以这里是代码:

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

答案 25 :(得分:0)

我建议另一个解决方案:

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

答案 26 :(得分:0)

我正在考虑更快地完成这项工作,这就是我提出的方法

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

答案 27 :(得分:0)

你已经完成了足够的代码来跟踪几分钟和几秒钟的时间。

您可以做的是将小时数加入:

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

这也可以满足您的需求。

答案 28 :(得分:-1)

您可以使用此代码段=>

 const timerCountDown = async () => {
    let date = new Date();
    let time = date.getTime() + 122000;
    let countDownDate = new Date(time).getTime();
    let x = setInterval(async () => {
      let now = new Date().getTime();
      let distance = countDownDate - now;
      let days = Math.floor(distance / (1000 * 60 * 60 * 24));
      let hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
      let minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
      let seconds = Math.floor((distance % (1000 * 60)) / 1000);

      if (distance < 1000) {
        // ================== Timer Finished 
        clearInterval(x);
      }
    }, 1000);
  };