【问题标题】:Date timezone conversion socket.io日期时区转换 socket.io
【发布时间】:2013-06-24 22:09:42
【问题描述】:

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

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

【问题讨论】:

    标签: node.js date timezone chat socket.io


    【解决方案1】:

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

    日期以 UTC 格式发送,而不是本地时区,这一点很重要。

    • 这可以是从 .getTime() 获得的整数(自 1970 年 1 月 1 日以来的毫秒数)。所有浏览器都支持这一点,但它不是一种人类可读的格式。

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

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

    【讨论】:

    • 您的“根据此”链接已损坏。我似乎在使用 socket.io 时遇到了这个问题。有新的链接或信息吗?
    • @BradW - 我的答案最初是在 2013 年写的。看来 repo 已经移动,并且由于某种未知原因,问题 804 已被删除。我已编辑我的答案以删除该链接以及不再相关的其他详细信息。解决方案就是不传递 Date 对象,而是调用 .toISOString().getTime() 并传递它。
    • 在通过 socket.io 发送之前调用 .toISOString() 解决了我的问题。谢谢!
    【解决方案2】:

    Javascript date object in different locale and timezone

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-24
      • 2013-01-17
      • 1970-01-01
      • 2019-12-21
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多