繁体   English   中英

在聊天系统中保持时间戳准确-使用Timeago jQuery插件

[英]Keeping timestamps accurate in chat system - using timeago jQuery plugin

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

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

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

对于将始终为用户提供准确时间的策略有什么想法吗?

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

无论如何,您都可以将差异发送给用户。 可以使用时间增量从当前时间创建时间戳,并将其放入title属性。

一种更简单的方法是只发送一条消息,说“此消息是'立即发送的'”,并且相应地构造了title属性。

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

另外,有一种方法可以在不修改timeago来源的情况下进行操作:

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

var timeDelta = serverNow - clientNow

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM