Jquery Timeago NaN年前从.attr

时间:2015-09-28 14:53:55

标签: javascript jquery socket.io timeago

首先,我终于在与此争吵了一段时间后发帖。

基本上,我正在使用Socket.IO为正在处理的网站创建一个信使。我在使用显示NaN年前的timeago插件时遇到了问题。

在谷歌搜索后,我发现timeago插件需要一个非常规范的日期格式或Java Date()对象。

这是我的代码..

socket.on('chat.message', function (data) {
  data = JSON.parse(data);
  if (data.hasOwnProperty('system')) {
    toastr["success"](data.msg);
  } else {
    $chat.append(
      '<li class="left clearfix">' +
      '<span class="chat-img pull-left">' +
      '<img src="https://www.gravatar.com/avatar/?d=mm&amp;s=40" alt="User Avatar" class="img-circle" width="50" />' +
      '</span>' +

      '<div class="chat-body clearfix">' +
      '<div class="header">' +
      '<strong class="primary-font">' + data.nickname + '</strong>' +
      '<small class="pull-right text-muted time" data-time="' + data.timeSent + '">' +
      '<span class="glyphicon glyphicon-time"></span>' + $.timeago(data.timeSent) +
      '</small>' +
      '</div>' +
      '<p>' + data.msg + '</p>' +
      '</div>' +
      '</li>'
    );
    $('.panel-body').animate({scrollTop: $chat.height()});
  }
});

function updateTimes() {
  $('.time').each(function () {
    var time = $.timeago($(this).attr('data-time'));
    $(this).html(time);
  });
}
setInterval(function () {
  updateTimes();
}, 3000);

正如您所看到的,附加到页面上的每个消息元素都具有timeago输出,并且发送的原始时间存储在我的函数的属性中,以使用updateTimes()进行更新。

首次收到邮件时,一切都很好。但是,当我使用属性的值并将其传递给timeago时,这就是一切都出错的地方。

从搜索周围,我想我可以做到以下几点:

function updateTimes() {
  $('.time').each(function() {
    var time = new Date($(this).attr('data-time'));
    $(this).html($.timeago(time));
  });
}

虽然这也没有用。

...编辑...

我忘了提一下我是如何设定时间的。

var d = new Date();
var time = d.getTime();

希望这对某些人来说很明显,不幸的是我的javascript知识不足!

非常感谢任何帮助。

好的,所以现在已经解决了。

似乎你不能传递Date()一个字符串,所以我不得不

var time = new Date(parseInt($(this).attr('data-time')));

非常感谢@amklose

1 个答案:

答案 0 :(得分:0)

好的,所以现在已经解决了。

似乎你不能将Date()传递给一个字符串,所以我必须

var time = new Date(parseInt($(this).attr('data-time')));

非常感谢@amklose