0

我正在创建一个基于网络的聊天/消息系统。由于可以保存聊天,因此聊天的每条消息和发送每条消息的时间都存储在服务器上的 mysql 数据库中。时间戳以 UTC 时间的 mysql DATETIME 格式存储,时间戳在服务器上生成。

当从服务器检索消息及其随附的时间戳时,我正在使用jQuery timeago 插件并将时间戳格式化为以“1 分钟前”、“3 天前”等形式显示。

这样做的问题是“timeago”时间是相对于用户机器的时间计算的。例如,假设您收到一条实际上仅在 2 秒前发送的消息。如果您的机器时间相对于服务器时间快了三分钟,则此消息的时间显示为“3 分钟前”。

对于始终向用户显示准确时间的策略有什么想法吗?

4

2 回答 2

0

首先,您确定要为聊天系统提供如此精确的时间同步吗?如果某人的时钟领先和落后,那是他/她的问题,而不是你的问题。

无论如何,您可以将差异发送给用户。time-delta 可用于从当前时间创建时间戳,并将其放在 title 属性中。

一种更简单的方法是只发送一条消息,说“这条消息是'刚刚'发送的”,并相应地构造标题属性。

于 2012-06-01T04:32:34.623 回答
0

您可以修改源代码。请参阅https://github.com/rmm5t/jquery-timeago/blob/master/jquery.timeago.js中的第 146 行。使其可选地与指定的用户“现在”一起使用,该用户指定覆盖新的 Date()。然后让服务器告诉客户端服务器时间的“现在”是什么。

或者,有一种方法可以在不修改 timeago 源的情况下做到这一点:

让服务器告诉客户端它的当前时间是什么,然后计算它与客户端时间之间的差异:

var timeDelta = serverNow - clientNow

然后,将 timeDelta 添加到每条消息的时间,然后再将其传递给 timeago。

于 2012-06-01T04:32:49.173 回答