Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 日期时区转换套接字.io_Node.js_Date_Timezone_Chat_Socket.io - Fatal编程技术网

Node.js 日期时区转换套接字.io

Node.js 日期时区转换套接字.io,node.js,date,timezone,chat,socket.io,Node.js,Date,Timezone,Chat,Socket.io,我正在使用node.js和socket.io编写一个聊天程序。当用户发送消息时,我希望他们发送消息的时间被发出。但是,我希望将日期数据转换为相应接收者的时区,而不是发送数据的人的时区。JavaScript会自动处理这个问题,还是我需要修复它 socket.emit('chat', { message: 'message', date: new Date() } 这个答案看起来不错。将所有日期存储为UTC,然后转换为接收者时区。您只需将UTC值从日期发送回您的服务器并发送到另一

我正在使用node.js和socket.io编写一个聊天程序。当用户发送消息时,我希望他们发送消息的时间被发出。但是,我希望将日期数据转换为相应接收者的时区,而不是发送数据的人的时区。JavaScript会自动处理这个问题,还是我需要修复它

socket.emit('chat', {
    message: 'message',
    date: new Date()
}


这个答案看起来不错。将所有日期存储为UTC,然后转换为接收者时区。

您只需将UTC值从
日期发送回您的服务器并发送到另一个客户端即可。即使它们有不同的时区,当显示
日期时,本地客户端也会将UTC值转换为该时区

重要的是,日期以UTC而不是本地时区发送

  • 这可以是一个整数(自1970年1月1日UTC起为毫秒),从
    .getTime()
    获取。所有浏览器都支持这一点,但它不是一种非常人性化的可读格式

  • 它也可以是UTC时ISO8601/RFC3339格式的字符串,如
    2013-06-26T15:40:00Z
    ,可通过
    .toISOString()
    获得


您不能直接传递
Date
对象,正如您在示例中所示。Socket.io只需对其调用
.toString()
。这将最终发送一个人类可读的RFC822格式字符串,其中包含本地时区,而不是您想要的UTC值。

您的“根据此”链接已断开。我似乎在socket.io中遇到了此问题。有新的链接或信息吗?@BradW-我的答案最初写在2013年。看来回购协议已经移动,出于未知原因,第804期已被删除。我已经编辑了我的答案,删除了那个链接,以及其他不再相关的细节。解决方法就是不传递
日期
对象,而是在其上调用
.toISOString()
.getTime()
并传递它。在通过socket.io发送之前调用
.toISOString()
解决了我的问题。谢谢