使用jquery/javascript每分钟更新一次时间描述
我创建了以下代码,以每分钟更新所有跨度的文本内容。页面上有许多这样的跨度,每分钟都需要更新:使用jquery/javascript每分钟更新一次时间描述,javascript,jquery,unix-timestamp,Javascript,Jquery,Unix Timestamp,我创建了以下代码,以每分钟更新所有跨度的文本内容。页面上有许多这样的跨度,每分钟都需要更新: <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-uni
<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年。你知道它为什么这么做吗
EDIT2好的,现在我有了/1000,以便php unix时间与js getTime匹配。唯一的问题是,现在它正在将此应用于所有值。例如,对于所有.time_前的实例,我有31分钟的时间-我如何让它一次只适用于一个实例,以便每个实例都有不同的时间
EDIT3添加了正确的代码,以防任何人发现它有用。您出现此错误,因为floor不是JS中的函数 每次使用
floor()
使用
相反。您出现了这个错误,因为floor在JS中不是一个函数 每次使用
floor()
使用
相反。floor是Math对象上的一个函数,因此要调用它,需要使用Math.floor
您可以考虑在每个IF块中设置一条消息,并在函数的末尾设置一次。这样,如果您需要更改任何类或属性,您只需要在一个位置进行更改
其他一些注意事项:使用html而不是文本集html内容;使用时应使用基数,否则任何前导为0的内容都将被解析为八进制数,而不是十进制数 您需要使用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);
floor是Math对象上的一个函数,因此要调用它,需要使用Math.floor
您可以考虑在每个IF块中设置一条消息,并在函数的末尾设置一次。这样,如果您需要更改任何类或属性,您只需要在一个位置进行更改
其他一些注意事项:使用html而不是文本集html内容;使用时应使用基数,否则任何前导为0的内容都将被解析为八进制数,而不是十进制数 您需要使用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);
JavaScript没有全局floor方法,但它有Math.floor。另外,您的其他人不应该在它之后有条件。否则差异>=63244800此外,unix不是有效的属性名。您至少应该使用data unix之类的工具来兼容HTML5。我看到的另一件事是,你们似乎假设你们的比较数字,比如60,120,等等,代表秒,而实际上它们是毫秒。您需要将它们乘以1000,比如60000、120000等等。将所有代码都封装在setInterval中。每个,如$.timeago.eachfunctioni、elem{var unix=$elem.attrdata-unix/*等*/};回调中的elem参数表示迭代中的当前.time\u ago元素。这就是为什么你要做$elem.attr。。。因此,您还将执行$elem.text…JavaScript没有全局floor方法,但它有Math.floor。此外,您的else不应该在它之后有条件。否则差异>=63244800此外,unix不是有效的属性名。您至少应该使用data unix之类的工具来兼容HTML5。我看到的另一件事是,你们似乎假设你们的比较数字,比如60,120,等等,代表秒,而实际上它们是毫秒。您需要将它们乘以1000,比如60000、120000等等。将所有代码都封装在setInterval中。每个,如$.timeago.eachfunctioni、elem{var unix=$elem.attrdata-unix/*等*/};回调中的elem参数表示迭代中的当前.time\u ago元素。这就是为什么你要做$elem.attr。。。因此,您还将执行$elem.text。。。。