0

Web ベースのチャット/メッセージング システムを作成しています。チャットは保存できるため、チャットの各メッセージと各メッセージが送信された時刻は、サーバーの mysql データベースに保存されます。タイムスタンプは UTC 時間の mysql DATETIME 形式で保存され、タイムスタンプはサーバー上で生成されます。

メッセージとそれに付随するタイムスタンプがサーバーから取得されるので、jQuery timeago プラグインを使用し、タイムスタンプをフォーマットして、「1 分前」、「3 日前」などの形式で表示します。

これに関する問題は、「timeago」時間がユーザーのマシンの時間に対して相対的に計算されることです。たとえば、実際には 2 秒前に送信されたメッセージを受信したとします。マシンの時間がサーバーの時間より 3 分進んでいる場合、このメッセージの時間は「3 分前」と表示されます。

常に正確な時間をユーザーに提示する戦略のアイデアはありますか?

4

2 に答える 2

0

まず、チャット システムにそのような正確な時刻同期が必要ですか? 誰かの時計が前後している場合、それはその人の問題であって、あなたの問題ではありません。

とにかく、違いをユーザーに送信できます。time-delta を使用して、現在の時刻からタイムスタンプを作成し、それを title 属性に入れることができます。

より簡単な方法は、「このメッセージは「たった今」送信されました」というメッセージを送信することであり、それに応じて title 属性が構築されます。

于 2012-06-01T04:32:34.623 に答える
0

ソースコードを変更できます。https://github.com/rmm5t/jquery-timeago/blob/master/jquery.timeago.jsの 146 行目を参照してください。オプションで、new Date() をオーバーライドするユーザー指定の「now」で動作するようにします。次に、サーバー時間の「今」が何であるかをクライアントに伝えます。

または、timeago のソースを変更せずにそれを行う方法があります。

サーバーにクライアントに現在の時刻を伝えさせ、それとクライアントの時刻の差を計算します。

var timeDelta = serverNow - clientNow

次に、timeago に渡す前に、各メッセージの時刻に timeDelta を追加します。

于 2012-06-01T04:32:49.173 に答える