Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery/javascript每分钟更新一次时间描述_Javascript_Jquery_Unix Timestamp - Fatal编程技术网

使用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。。。。