Javascript 是否有一个好的jQuery插件或JS代码用于持续时间?

Javascript 是否有一个好的jQuery插件或JS代码用于持续时间?,javascript,jquery,jquery-plugins,time,Javascript,Jquery,Jquery Plugins,Time,我基本上想制作以下内容: 从int 67到1分7秒 从int 953到15分53秒 从int 3869到1小时4分29秒 伪代码: // original <span class="time">67</span> //output <span class="time">1 minute 7 seconds</span> // js $('.time').format_duration(); //原件 67 //输出 1分7秒 //js $('

我基本上想制作以下内容:

从int 67到1分7秒

从int 953到15分53秒

从int 3869到1小时4分29秒

伪代码:

// original
<span class="time">67</span>

//output
<span class="time">1 minute 7 seconds</span>

// js
$('.time').format_duration();
//原件
67
//输出
1分7秒
//js
$('.time')。格式_duration();
使用 setTimeOut(表达式,毫秒)

其中,表达式可以是在毫秒中的时间完成时调用的函数

操作多个时间计数器的一个很好的示例可以在以下位置找到:

它并不优雅,但应该可以:

function format_duration(elem) {
var num = parseInt($(elem).text());
var hours = 0;
var mins = 0;
var secs = 0;
while (num > 0) {
  if (num < 60) {
    secs += num;
    num = 0;
  }
  else if (num < 3600) {
    mins++;
    num -= 60;
  }
  else if (num < 86400) {
    hours++;
    num -= 3600;
  }
}
var rv = "";
if (hours > 0) {
    rv += hours+" hours ";
}
if (mins > 0) {
    rv += mins+" mins ";
}
if (secs > 0) { 
    rv += secs+" secs ";
}
$(elem).text(rv);
}
函数格式\u持续时间(elem){
var num=parseInt($(elem.text());
var小时=0;
var-mins=0;
var-secs=0;
while(num>0){
如果(数量<60){
secs+=num;
num=0;
}
否则如果(数值<3600){
mins++;
num-=60;
}
否则如果(数量<86400){
小时++;
num-=3600;
}
}
var rv=“”;
如果(小时数>0){
rv+=小时数+“小时数”;
}
如果(分钟>0){
rv+=分钟+“分钟”;
}
如果(秒>0){
rv+=秒+“秒”;
}
元(elem).text(rv);
}

(更新以回答jquery用法)

为元素提供一个id,以便其易于访问:

<span id="time">67</span>
编辑:

根据Mike B.的建议添加了Math.floor()。

美妙的Guffa。不过,您需要在其中添加一些“楼层”呼叫:

<snip>
    var h = Math.floor(t / 3600);
    t %= 3600;
    var m = Math.floor(t / 60);
<snip>

var h=数学楼层(t/3600);
t%=3600;
var m=数学楼层(t/60);

借用Guffa的大部分答案,作为jQuery插件,这应该可以做到:

jQuery.fn.time_from_seconds = function() {
    return this.each(function() {
        var t = parseInt($(this).text(), 10);
        $(this).data('original', t);
        var h = Math.floor(t / 3600);
        t %= 3600;
        var m = Math.floor(t / 60);
        var s = Math.floor(t % 60);
        $(this).text((h > 0 ? h + ' hour' + ((h > 1) ? 's ' : ' ') : '') +
                     (m > 0 ? m + ' minute' + ((m > 1) ? 's ' : ' ') : '') +
                     s + ' second' + ((s > 1) ? 's' : ''));
    });
};
如果您有如下HTML:

<span class='time'>67</span>
<span class='time'>953</span>
<span class='time'>3869</span>
$('.time').time_from_seconds();
HTML将转换为:

<span class="time">1 minute 7 seconds</span>
<span class="time">15 minutes 53 seconds</span>
<span class="time">1 hour 4 minutes 29 seconds</span>
1分7秒
15分53秒
1小时4分29秒
每个元素还具有一个“原始”值,其中包含最初包含的秒数

我的回答直接回答了你的问题,但我想在黑暗中试一试:如果你想展示人类时代发生的事情(即“5分钟前”)有多长时间了,那么这是有可能的。不过,我认为它不接受秒作为格式。它必须是一个日期。


变量tbl=[
[7*24*60*60,'周'],
[24*60*60,'天'],
[60*60,‘小时’],
[60,‘分钟’],
[1,‘秒’]
];
函数转换(){
var t=parseInt($('#val').val());
var r='';
对于(变量i=0;i
以防您正在寻找更简洁的内容,并希望避免其他尝试中出现的尾随空格和不正确的复数问题:

function timeString( t ) {
    var ret = [], t = {
        hour: parseInt(t/3600),
        minute: parseInt(t/60%60),
        second: t%60
    };

    for ( var n in t )
        t[n] && ret.push( t[n], n + "s".substr( t[n] < 2 ) );

    return ret.join(" ");
}
函数时间串(t){
变量ret=[],t={
小时:帕西恩特(t/3600),
分钟:帕塞因特(t/60%60),
第二:t%60
};
for(t中的变量n)
t[n]&ret.push(t[n],n+“s.”substr(t[n]<2));
返回ret.join(“”);
}

我很确定OP希望函数将时间(以秒为单位)转换为h、m、s等字符串。扎克你说得对,现在在编辑之前,我可以看到问题的范围了。我认为这更像是一个JavaScript问题,而不是一个jQuery问题。您所要求的内容实际上超出了jQuery的功能范围……您可能是对的,但我想如果有可用的插件,我会让它与jQuery相关。。。我现在开始编写一些代码,但我确信这些代码在某些地方是可用的……事实上,如果我记得有一篇关于hoe的博客文章,那么它会以“人性化”的方式生成时间戳。。。我以为那里有一些有用的源代码,但我现在似乎找不到。
<html>
<head>
<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script>

var tbl = [
    [ 7*24*60*60, 'week' ],
    [ 24*60*60, 'day' ],
    [ 60*60, 'hour' ],
    [ 60, 'minute' ],
    [ 1, 'second' ]
];

function convert() {
    var t = parseInt($('#val').val());
    var r = '';
    for (var i = 0; i < tbl.length; i++) {
        var d = tbl[i];
        if (d[0] < t) {
            var u = Math.floor(t / d[0]);
            t -= u * d[0];
            r += u + ' ' + d[1] + (u == 1 ? ' ' : 's ');
        }
    }
    $('#result').html(r);
}

</script>
</head>
<body>
<input id='val' type='text' size='10' />
<input type='button' value='convert' onclick='convert()' />
<div id='result' />
</body>
</html>
function timeString( t ) {
    var ret = [], t = {
        hour: parseInt(t/3600),
        minute: parseInt(t/60%60),
        second: t%60
    };

    for ( var n in t )
        t[n] && ret.push( t[n], n + "s".substr( t[n] < 2 ) );

    return ret.join(" ");
}