首先,在与此斗争了一段时间后,我终于发布了。
基本上,我正在使用 Socket.IO 为我正在处理的网站创建一个信使。我遇到了 timeago 插件显示 NaN 几年前作为其输出的问题。
在谷歌搜索之后,我发现 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&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