Javascript 我应该如何处理群组实时聊天中的日期和时间?

Javascript 我应该如何处理群组实时聊天中的日期和时间?,javascript,php,jquery,time,Javascript,Php,Jquery,Time,目前,我正在为一个PHP小项目编写一个群组实时聊天程序。在编程过程中,我遇到了一个大问题:我应该如何处理日期和时间 聊天室的设计是这样的:理论上,在聊天室里,可以有无限多的人相互写作 现在,当有人写一条新消息时,我自然希望在消息中显示当前用户的日期和时间,以便用户知道之后他何时写了哪条消息。我通过在添加消息时调用JavaScript函数解决了这个问题,该函数将消息添加到聊天中,然后通过AJAX将其存储在数据库中 为了在新消息中设置时间,我按照以下步骤进行: let messageWrapper

目前,我正在为一个PHP小项目编写一个群组实时聊天程序。在编程过程中,我遇到了一个大问题:我应该如何处理日期和时间

聊天室的设计是这样的:理论上,在聊天室里,可以有无限多的人相互写作

现在,当有人写一条新消息时,我自然希望在消息中显示当前用户的日期和时间,以便用户知道之后他何时写了哪条消息。我通过在添加消息时调用JavaScript函数解决了这个问题,该函数将消息添加到聊天中,然后通过AJAX将其存储在数据库中

为了在新消息中设置时间,我按照以下步骤进行:

let messageWrapper = $( "#message-wrapper" ),
    newMessage     = $( "#template" ).clone(),
    newMessageDate = new Date();

newMessage.find( ".time" ).text( newMessageDate.getHours() + ":" + +( newMessageDate.getMinutes() < 10 ? "0" : "" ) + newMessageDate.getMinutes() );

messageWrapper.append( newMessage );
如您所见,我在这里使用函数
getTime()
,它给出了日期的时间戳

在PHP中,我现在接收时间戳并将其更改为我的数据库时间戳格式,以便我可以将其正确存储在数据库中:

$created           = $_POST['created'];
$formatted_created = date( 'Y-m-d H:i:s', $created / 1000 );
但是在这里我注意到时间戳是UTC格式的,与新消息中的时间不匹配。我认为这不会是一个问题,我只需要在显示它时尊重时区,但这并不是那么容易

假设某人A来自美国,并在聊天中写入,则显示他的时间,我以UTC格式获取时间戳。在世界的另一边,人B坐着,有一个不同的时区。在那里,浏览器使用本地时间,时间戳为UTC时间

但是,我现在的问题是,我不知道如何根据用户时区以正确的格式向用户显示消息

当然,PHP提供了设置时区的可能性,但那只能是特定的时区,这在我的情况下是无用的:

date_default_timezone_set('America/Los_Angeles');
echo date( 'Y-m-d H:i:s', strtotime( $message->created ) );
我的问题是,在这种情况下,我应该如何处理?我应该如何处理新邮件的日期和时间


PS:我知道这是一个很大的理论,并不是每个开发人员都喜欢它。然而,我已经尽力尽可能地描述这个问题。如果没有什么需要澄清的地方,我非常愿意添加它。

我处理这个问题的方法是避免在PHP代码中格式化日期,将所有内容都保留为unix时间戳,并在客户端代码中进行格式化,以便它可以使用用户的时区。我也不信任客户端的时间,而是在插入记录时使用当前的时间戳。@don't听起来很有趣。你(技术上)怎么样?您是否在
标签中处理它?在聊天过程中,如何获取.append()的时间戳?因为我喜欢这个主意。@Don't我很想听听你是怎么做到的。您是否在
中打印了一系列消息,并在JS document.ready函数中使用了这些消息?或者如何使用这些消息?在注释中很难简单描述。我会尽量用最少的例子和更好的描述来回答。@Don't谢谢!这将真正帮助我在聊天中输入正确的日期和时间。
date_default_timezone_set('America/Los_Angeles');
echo date( 'Y-m-d H:i:s', strtotime( $message->created ) );