我正在创建一个基于网络的聊天/消息系统。由于可以保存聊天,因此聊天的每条消息和每条消息的发送时间都存储在mysql数据库中的服务器上。时间戳以UTC时间的mysql DATETIME格式存储,时间戳在服务器上生成。
当从服务器检索消息及其附带的时间戳时,我正在使用jQuery timeago plugin并格式化时间戳以“1分钟前”,“3天前”的形式显示,依此类推。
这个问题是“timeago”时间是相对于用户机器的时间计算的。例如,假设您收到的消息实际上仅在2秒前发送过。如果您的机器的时间相对于服务器的时间快三分钟,则此消息的时间显示为“3分钟前”。
任何能够始终向用户提供准确时间的策略想法?
答案 0 :(得分:0)
首先,您确定要为聊天系统进行如此精确的时间同步吗?如果有人的时钟前后,那就是他/她的问题,而不是你的问题。
无论如何,您可以将差异发送给用户。时间增量可用于从当前时间创建时间戳,并将其放在title属性中。
更简单的方法是发送一条消息,说“此消息刚刚发送”,并相应地构建了title属性。
答案 1 :(得分:0)
您可以修改源代码。见https://github.com/rmm5t/jquery-timeago/blob/master/jquery.timeago.js中的第146行。使其可选地与指定为“now”的用户一起使用,该用户将覆盖新的Date()。然后让服务器告诉客户端服务器时间内“现在”是什么。
或者,有一种方法可以在不修改timeago的来源的情况下完成:
让服务器告诉客户端当前时间是多少,然后计算它与客户端时间之间的差异:
var timeDelta = serverNow - clientNow
然后,在将每个消息传递给timeago之前,将timeDelta添加到每个消息的时间。