日期时区转换套接字.io



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

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

您可以简单地将UTC值从Date发送回您的服务器,然后再发送到另一个客户端。即使它们有不同的时区,当显示Date时,本地客户端也会从UTC值转换为该时区。

将日期发送为UTC而不是本地时区,这一点非常重要。

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

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

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

不同语言环境和时区中的Javascript日期对象

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

最新更新