使用 JavaScript 将秒数转换为 HH-MM-SS?

IT技术 javascript date time date-format time-format
2021-01-14 22:38:43

如何HH-MM-SS使用 JavaScript将秒转换为字符串?

6个回答

借助 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);
杰出的。没有任何 3rd 方库。这是最好的
2021-03-13 22:38:43
这在 IE11 中对我不起作用,我明白了 Object doesn't support property or method 'toISOString'
2021-03-22 22:38:43
我不知道为什么每个人都在添加额外的库或在完美运行时手动进行数学计算。谢谢!
2021-03-23 22:38:43
这种方法的问题是它会在 24 小时后溢出,从而阻止您显示超过此长度的时间。如果您的秒数少于 24 小时,那么完美的解决方案。
2021-03-25 22:38:43
这甚至可以缩短为一行: new Date(SECONDS * 1000).toISOString().substr(11, 8);
2021-03-30 22:38:43

更新(2020):

请使用@Frank 的单行解决方案:

new Date(SECONDS * 1000).toISOString().substr(11, 8)

如果SECONDS<3600并且您只想显示MM:SS,则使用以下代码:

new Date(SECONDS * 1000).toISOString().substr(14, 5)

这是迄今为止最好的解决方案。


旧答案:

使用Moment.js图书馆。

将这个库用于像这样的一项次要任务会增加59,024 bytes您的项目,以获得与 about53 bytes会给您带来的相同效果. . 下面new Date(SECONDS * 1000).toISOString().substr(11, 8);
2021-03-17 22:38:43
当然,Moment.js 并不是那么大,但如果你用它做的只是将秒转换为 hh:mm:ss,这似乎有点矫枉过正。而是使用这些或其他答案中建议的功能之一。
2021-03-22 22:38:43
如果有的话,这个答案是部分错误的。如果数量超过 86400 秒会发生什么?;)
2021-03-27 22:38:43
我认为另一种解决方案比混合使用另一个 js 库要好。
2021-03-31 22:38:43
为一个简单的操作添加库,我认为不应该被接受的答案。是的,这有效,但有更好的解决方案!!!
2021-04-01 22:38:43

我认为标准 Date 对象的任何内置功能都不会以比自己进行数学计算更方便的方式为您完成此操作。

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

例子:

@HannounYassir console.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
2021-03-19 22:38:43
@BT643:奇怪的是我没有处理那个。我现在已经这样做了,你不想使用parseInt它,那是用于解析字符串,而不是操作数字。Math.floor将是这里的相关操作。
2021-03-20 22:38:43
@BT643:totalSeconds % 60如果totalSeconds有小数部分,只能有小数部分。您是否想将其搁置取决于您是要丢失该信息还是要保留它。(我们正在做的另一层操作不会丢失任何信息,因为它们只是清除了最终会出现在minutes和 中的数据seconds。)
2021-03-28 22:38:43
我觉得这有什么问题吗?当我尝试了,我得到小数回来,所以180秒将返回0.05hours变量。我把它放在 aparseInt中,为我的情况修复了它,但我认为这对所有事情都不准确。不过,这对我有帮助,所以谢谢!
2021-03-30 22:38:43
喔好吧!改变了我的代码。尽管您可能也希望在几秒钟内使用它:seconds = Math.floor(totalSeconds % 60);. 我也在那里得到了一个十进制结果。
2021-04-05 22:38:43

我知道这有点旧,但是...

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
@SantiagoHernández 太棒了!这现在可以完美地工作超过 24 小时。
2021-04-01 22:38:43
几分之一秒呢?03:45:45.xxx?
2021-04-03 22:38:43
+1。这个或 TJ 应该是公认的答案,因为那些是唯一适用于持续时间超过 24 小时的情况(并且问题不限制持续时间)。
2021-04-07 22:38:43

正如克莱顿他的回答中指出的那样moment.js可用于:

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');
但这不能成为可选的。那可能看起来很丑。
2021-03-18 22:38:43
@GiladPeleg 如果秒数超过一天,天数是内部计算的,它只会返回剩余的小时、分钟和秒。如果您还想计算天数,可以尝试moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss').
2021-03-19 22:38:43
@OrangePot 如果秒数超过一年,则在内部计算年数,它只会返回剩余的天数、小时数、分钟数和秒数。如果你也想计算年数,你可以试试.format('YYYY DDD HH:mm:ss')
2021-03-23 22:38:43
如果秒数超过一天会怎样?
2021-03-30 22:38:43
如果秒数超过一年会怎样?
2021-04-08 22:38:43