2013-06-26 58 views
1

我已经创建了以下代码来每分钟更新所有跨度的文本内容。有许多网页上,这些跨越所有需要每分钟更新的:使用jquery/javascript每分钟更新一次的时间说明

<span data-unix="1372263005" class="time_ago">4 minutes ago</span> 

的代码如下:

window.setInterval(function(){ 
    $(".time_ago").each(function(i, elem) { 
     var unix = $(elem).attr("data-unix") 
     var now = new Date().getTime(); 
     now = parseInt(now)/1000; 
     var amount = 0; 
     var difference = 0; 

     difference = parseInt(now) - parseInt(unix); 

     if (difference < 60) 
     { 
      $(elem).html('a few seconds ago'); 
     } 
     else if (difference < 120) 
     { 
      $(elem).html('a minute ago'); 
     } 
     else if (difference < 3600) 
     { 
      amount = Math.floor(difference/60); 
      $(elem).html(amount + ' minutes ago'); 
     } 
     else if (difference < 7200) 
     { 
      $(elem).html('an hour ago'); 
     } 
     else if (difference < 86400) 
     { 
      amount = Math.floor(difference/3600); 
      $(elem).html(amount + ' hours ago'); 
     } 
     else if (difference < 172800) 
     { 
      $(elem).html('a day ago'); 
     } 
     else if (difference < 2635200) 
     { 
      amount = Math.floor(difference/86400); 
      $(elem).html(amount + ' days ago'); 
     } 
     else if (difference < 5270400) 
     { 
      $(elem).html('a month ago'); 
     } 
     else if (difference < 31622400) 
     { 
      amount = Math.floor(difference/2635200); 
      $(elem).html(amount + ' months ago'); 
     } 
     else if (difference < 63244800) 
     { 
      $(elem).html('a year ago'); 
     } 
     else 
     { 
      amount = Math.floor(difference/31622400); 
      $(elem).html(amount + ' years ago'); 
     } 
    }); 
    return false; 
}, 60); 

EDIT1)好了,现在我已经做了一些改变你的建议,但它将跨度文本更改为43351年。任何想法,为什么它这样做?

编辑2)好了,现在我有/ 1000,以便php unix时间与js getTime()匹配。唯一的问题是现在它将这个应用于所有的值。即)对于.time_ago的所有实例,我获得31分钟的时间 - 我如何才能将它一次只应用于一个实例,以便为每个实例获取不同的时间?

EDIT3)增加了正确的代码的情况下,任何人发现它是有用的..

+3

JavaScript没有全局的'floor()'方法,但它确实有'Math.floor()'。 –

+2

另外,你的'else'后面不应该有条件。 'else(difference> = 63244800)' –

+0

另外,您使用'.text()'来设置HTML内容,这将导致显示完整的HTML语法而不是解析。 –

回答

2

floor()Math对象上的函数,所以要调用它,您需要使用Math.floor()

您可能会考虑在每个if/else块中设置一条消息,并在函数结束时将其设置一次。这样,如果你需要改变任何类或属性,你只需要在一个地方做。

其他一些注意事项:使用html()代替text()设置HTML内容;您应该在使用parseInt()时使用基数,否则具有前导0的任何数据将被解析为八进制数字,而不是十进制数字。

你会想使用带有data-开始的HTML5惯例设置unix属性,那么您可以使用jQuery的data()attr()功能检索值。如果您使用data()函数,jQuery将为您输入值为整数。

window.setInterval(function(){ 
    var unix = $(".time_ago").data('unix'); 
    var now = new Date().getTime(); 
    var amount = 0; 
    var difference = now - unix; 
    var message = ""; 

    if (difference < 60) 
    { 
     message = 'a few seconds ago'; 
    } 
    else if (difference < 120) { 
     message = 'a minute ago'; 
    } 
    ... 

    //just do this once 
    $(".time_ago").html('<span data-unix="' + unix + '" class="time_ago">' + message + '</span>'); 
    return false; 
}, 60); 
2

你得到这个错误,因为地板()不是JS的功能。

每次使用

floor() 

使用

Math.floor() 

代替。

相关问题