まず、これでしばらく格闘してやっと投稿します。
基本的に、私は 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&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に感謝します