Node.js 日期时区转换套接字.io
我正在使用node.js和socket.io编写一个聊天程序。当用户发送消息时,我希望他们发送消息的时间被发出。但是,我希望将日期数据转换为相应接收者的时区,而不是发送数据的人的时区。JavaScript会自动处理这个问题,还是我需要修复它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值从日期发送回您的服务器并发送到另一
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()
解决了我的问题。谢谢