0

I'm writing a chat program using node.js and socket.io. When a user sends a message, I'd like the time at which they sent it to be emitted. Instead of the Date data being in the timezone of the person who sent it, however, I'd like it to be converted to the timezones of the respective recievers. Will JavaScript take care of this automatically, or is it something I need to fix?

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

2 回答 2

1

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

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

  • 这可以是从.getTime(). 所有浏览器都支持这一点,但它不是一种人类可读的格式。

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

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

于 2013-06-24T22:55:52.970 回答
0

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

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

于 2013-06-24T22:24:45.243 回答