JavaScript 秒到时间字符串,格式为 hh:mm:ss

IT技术 javascript date time date-format time-format
2021-01-17 23:19:40

我想将持续时间(即秒数)转换为以冒号分隔的时间字符串 (hh:mm:ss)

我在这里找到了一些有用的答案,但他们都在谈论转换为 x 小时和 x 分钟格式。

那么是否有一个小片段可以在 jQuery 或原始 JavaScript 中执行此操作?

6个回答
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;
}

您现在可以像这样使用它:

alert("5678".toHHMMSS());

工作片段:

使用“%”运算符>> var minutes = Math.floor((sec_num % 3600) / 60); var seconds = Math.floor(sec_num % 60);
2021-03-14 23:19:40
啊谢谢。在您对整数调用 .toString() 之前,我看不到它作为字符串双向工作。你也可以通过解析 int 让它以相反的方式工作
2021-03-17 23:19:40
感谢原型的想法,我喜欢如何更容易地调用它。我制作了号码的原型,这样我也可以在他们身上调用它。我还发现这个答案可以删除不需要的小时和分钟。
2021-03-19 23:19:40
不要放在原型上,只做一个实用函数。
2021-03-22 23:19:40
修改原型这样的东西?390个赞?严重地?
2021-03-29 23:19:40

借助 JS Date 方法,您可以在没有任何外部 JS 库的情况下设法做到这一点,如下所示:

var date = new Date(0);
date.setSeconds(45); // specify value for SECONDS here
var timeString = date.toISOString().substr(11, 8);
console.log(timeString)

很好的答案。您可以使用.replace(/^[0:]+/, "")after从字符串的开头substr删除所有零:
2021-03-13 23:19:40
在前面添加此项以处理超过 24 小时的时间。parseInt(d / 86400) + "d"
2021-03-19 23:19:40
我喜欢这个答案。它可以更短:new Date(1000 * seconds).toISOString().substr(11, 8).
2021-03-25 23:19:40
如果持续时间长于 23:59:59,这会中断。
2021-03-25 23:19:40
为什么这个答案这么低?我在 2011 年得到它,可能 IE 7 和 8 是不支持它的基础,但它是 2014 年底,所以这个简单、简单、无忧的解决方案应该更高。
2021-04-05 23:19:40

要获取格式中的时间部分hh:MM:ss,您可以使用以下正则表达式:

(这在上面有人在同一篇文章中提到过,谢谢。)

    var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
    console.log(myDate)

更简单的版本: new Date().toTimeString().split(" ")[0]
2021-03-12 23:19:40
不应该是“new Date(null, null, null, null, null, timeInSecs).toTimeString().replace(/.*(\d{2}:)(\d{2}:\d{2 }).*/, "$2")" ?
2021-03-15 23:19:40
这对于显示给定时间很好,但请注意问题(以及此处的其他答案)是关于显示持续时间的,即与当前时间无关的给定秒数。
2021-03-22 23:19:40
+1 - 超级简单;谢谢!只是使用了它的一个变体来只显示分钟和秒:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
2021-04-03 23:19:40
的使用replace令人困惑。为什么不使用new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]
2021-04-09 23:19:40

我推荐使用 Date 对象的普通 javascript。(对于更短的解决方案,使用toTimeString,请参阅第二个代码片段。)

var seconds = 9999;
// multiply by 1000 because Date() requires miliseconds
var date = new Date(seconds * 1000);
var hh = date.getUTCHours();
var mm = date.getUTCMinutes();
var ss = date.getSeconds();
// If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time
// if (hh > 12) {hh = hh % 12;}
// These lines ensure you have two-digits
if (hh < 10) {hh = "0"+hh;}
if (mm < 10) {mm = "0"+mm;}
if (ss < 10) {ss = "0"+ss;}
// This formats your string to HH:MM:SS
var t = hh+":"+mm+":"+ss;
document.write(t);

(当然,创建的 Date 对象将有一个与之关联的实际日期,但该数据是无关紧要的,因此出于这些目的,您不必担心。)


编辑(简短的解决方案):

利用该toTimeString函数并在空白处拆分:

var seconds = 9999; // Some arbitrary value
var date = new Date(seconds * 1000); // multiply by 1000 because Date() requires miliseconds
var timeStr = date.toTimeString().split(' ')[0];

toTimeString给出'16:54:58 GMT-0800 (PST)',并在第一个空格上拆分给出'16:54:58'

我不明白为什么当他要求持续时间时你要返回一个 12 小时的时间戳?
2021-03-23 23:19:40
如果我使用date.getUTCHours()and ,我会得到正确的结果date.getUTCMinutes()
2021-03-24 23:19:40
它似乎在本地时区制作日期,在我的情况下,时间增加了 1 小时。秒 = 0 时,我得到“01:00:00”(1970 年 1 月 1 日星期四 01:00:00 GMT+0100 (CET)),这是错误的。
2021-03-25 23:19:40
我喜欢这个,但它确实假设持续时间少于 24 小时
2021-03-31 23:19:40
在前面添加 parseInt(d / 86400) + "d " 以处理超过 24 小时的情况
2021-04-05 23:19:40

谷歌搜索结果如下:

function secondsToTime(secs)
{
    secs = Math.round(secs);
    var hours = Math.floor(secs / (60 * 60));

    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);

    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);

    var obj = {
        "h": hours,
        "m": minutes,
        "s": seconds
    };
    return obj;
}
secondsToTime(119.9)=> Object {h: 0, m: 1, s: 60}. 要解决此问题,请secs = Math.round(secs);在方法的开头添加当然,我们在演示中看到了这个错误......
2021-04-03 23:19:40