【问题标题】:Is it possible to display times in the recipient's timezone?是否可以在收件人的时区显示时间?
【发布时间】:2026-01-07 20:50:01
【问题描述】:

我有一个向 Slack 频道发布消息的 webhook。有没有办法确保消息中提到的时间显示在用户的本地时区?

【问题讨论】:

  • 您的意思是查看邮件的每个人都可能会看到不同的文本吗?我很确定答案是否定的。

标签: slack-api


【解决方案1】:

Slack 的 API 允许您使用特殊的占位符在用户的时区中输出时间。请参阅 API 文档中的 Formatting Dates

【讨论】:

  • 该页面上的文档明确指出包含日期或时间的消息应显示在看到消息的人的本地时区。...
  • @DanielvanFlymen 不确定我是否关注您的评论。 OP 的问题是如何根据最终用户的时区不同地显示每个客户端的时间。上面的链接向您展示了如何做到这一点。
【解决方案2】:

根据 slack API 文档,chat.postMessage 方法返回一个 JSON,并在此处返回类似这样的响应

{
    "ok": true,
    "ts": "1405895017.000506",
    "channel": "C024BE91L",
    "message": {
        ...
    }
}

所以,我想您可以根据需要解析并获取时间戳并对其进行格式化。这是 slack api postMessage API documentation 的链接。顺便提一下,ts是上述 JSON 响应中的时间戳。

【讨论】:

    【解决方案3】:

    似乎无法在共享频道中以用户的时区显示日期。尽管 Linux 和 Android 的 Slack 客户端似乎都在使用嵌入式浏览器作为其 UI 的平台,但我们无法在客户端上运行 JS,这意味着我们无法做任何动态的事情,比如看提升本地 TZ。

    如果消息是发给单个用户的直接消息,那么 codehat 的答案会起作用,但如果我们不希望频道消息和直接消息之间的时区不同。

    【讨论】:

      【解决方案4】:

      https://api.slack.com/reference/surfaces/formatting#date-formatting 中所述,您可以使用特殊的日期符号<!date^timestamp^token_string^optional_link|fallback_text> 来使用查看器本地 TZ 显示时间。

      我用来格式化 slack 时间的 GO 的 sn-p :

      func SlackFormat(t time.Time) string {
          return `<!date^` + strconv.FormatInt(t.Unix(), 10) + `^{date_num} {time}|` + t.Format(time.RFC3339) + `>`
      }
      

      【讨论】:

        最近更新 更多