1

我创建了以下代码来每分钟更新所有跨度的文本内容。页面上有许多这样的跨度,每分钟都需要更新:

<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_ago 的所有实例获得 31 分钟 - 我如何让它一次仅适用于一个实例,以便我为每个实例获得不同的时间?

EDIT3)添加了正确的代码,以防有人发现它有用..

4

2 回答 2

2

您收到此错误是因为floor()不是 JS 中的函数。

每次使用

floor() 

利用

Math.floor()

反而。

于 2013-06-26T16:11:17.500 回答
2

floor()Math对象上的一个函数,因此要调用它,您需要使用Math.floor().

您可以考虑在每个 if/else 块中设置一条消息,并在函数结束时设置一次。这样,如果您需要更改任何类或属性,您只需在一个地方进行。

其他一些注意事项:使用 html() 而不是 text() 设置 HTML 内容;使用parseInt()时应该使用基数,否则任何以 0 开头的内容都将被解析为八进制数,而不是十进制数。

您需要unix使用以 开头的 HTML5 约定来设置属性data-,然后您可以使用 jQuerydata()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);
于 2013-06-26T16:12:02.267 回答