设置自上次发送/接收消息以来经过的时间

时间:2014-06-27 20:54:18

标签: jquery

我的聊天脚本:

initChat: function () {

    var cont = $('#chats');
    var list = $('.chats', cont);
    var form = $('.chat-form', cont);
    var input = $('input', form);
    var btn = $('.btn', form);

    $('.scroller', cont).slimScroll({
        scrollTo: list.height()
    });

    var handleClick = function (e) {
        e.preventDefault();

        var text = input.val();
        if (text.length == 0) {
            return;
        }

        var contains = text.match(/(@Tim marshall:|@Mark Smyth:)/i) === null ? "left" : "right";
            sender;

        if(contains === 'right'){
            var sender = 'Private message from: <a href="#" class="name">Bob Nilson</a>&nbsp;<br />';
        }else{
            var sender = '<a href="#" class="name">Bob Nilson</a>&nbsp;';
        };

        var time = new Date();
        var time_str = time.toString('MMM dd, yyyy hh:mm:ss');
        var tpl = '';
        tpl += '<li class="' + contains + '">';
        tpl += '<img class="avatar" alt="" src="../../assets/admin/layout/img/avatar1.jpg"/>';
        tpl += '<div class="message">';
        tpl += '<span class="arrow"></span>';
        tpl += sender;
        tpl += '<span class="datetime">at ' + time_str + '</span>';
        tpl += '<span class="body">';
        tpl += text.toString().replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#39;").replace(/"/g, "&#34;");
        tpl += '</span>';
        tpl += '</div>';
        tpl += '</li>';

        var msg = list.append(tpl);
        input.val("");
        $('.scroller', cont).slimScroll({
            scrollTo: list.height()
        });
    }

    /*
    $('.scroller', cont).slimScroll({
        scrollTo: list.height()
    });
    */

    $('body').on('click', '.message .name', function (e) {
        e.preventDefault(); // prevent click event

        var name = $(this).text(); // get clicked user's full name
        input.val('@' + name + ':'); // set it into the input field
        Metronic.scrollTo(input); // scroll to input if needed
    });

    btn.click(handleClick);
    input.keypress(function (e) {
        if (e.which == 13) {
            handleClick();
            return false; //<---- Add this line
        }
    });
},

此脚本部分从index.js中的第484行开始。你可以和我的员工聊聊here

发送消息后,您会看到以下内容:

  

Bob Nilson在2014年6月27日星期五21:30:45 GMT + 0100(GMT日光时间)

     

测试消息

我要做的是显示自发送邮件以来的动态时间。根据我的理解,我相信我需要编辑理论:

var time = new Date();
var time_str = time.toString('MMM dd, yyyy hh:mm:ss');

是一个时间戳,然后以某种方式显示所有我的.datetime类。同样的Facebook,我想有一些时间从10800(3小时秒)到14400(4小时秒)来说'大约四小时前'。

我怎样才能达到这样的目标?

1 个答案:

答案 0 :(得分:0)

首先,您需要能够轻松地重绘它。如果你每帧/周期重新绘制标签,那么你没事。

因此,您可以为发布的每条评论存储时间戳,或者您可以使用上次发布评论的时间存储全局变量。

然后,既然您知道当前时间,那么您可以找到自上次评论以来的时间,然后对每个案例使用if / then语句:

timeDiff = currentTime - lastTimeStamp;
label = "";

if (timeDiff < 600){
   label = "A moment ago"
}
else if (timeDiff < 1200){
   label = "1 minute ago"
}
//and so on

然后使用label变量显示您想要的消息

或者,您可以创建地图或平行数组以将timeDiff映射到label,然后循环遍历每个数据,直到您获得匹配为止。

编辑:要获取lastTimeStamp变量,您可以将其全局存储并在每次发布帖子时更新它,或者您可以每帧/周期循环遍历每个数据点以每次动态获取它时间。全局变量的想法是有利的,因为它不需要那么多的处理能力。循环思想是有利的,因为它不需要你每次发布帖子时都更新全局变量。

所以,要做循环的想法:假设你有一个名为posts的帖子数组,填充了Post类型的对象,每个Post对象都有一个timeStamp变量,你可以这样循环:

var lastTimeStamp = 0;
for (var i = 0; i < posts.length; i++){
   if (posts[i].timeStamp > lastTimeStamp){
      lastTimeStamp = posts[i].timeStamp;
   }
}

所以,这就是你如何获得lastTimeStamp变量的方法。当然,根据您的变量名称和/或Posts

的实现,代码看起来会略有不同