Rails 4 - 如何正确显示跨时区的时间?

时间:2015-03-29 19:48:15

标签: ruby-on-rails ruby date time utc

我正在开发一个用户创建事件的应用程序。对于每个事件,我使用倒计时 - 所以在页面上显示事件开始时剩余的时间(小时,分钟和秒)。

我在荷兰(+ 1h),所以当我创建一个事件并在3月29日19:45设置它的开始,然后查看数据库时,我看到以下(列为datetime ):

2015-03-29 19:45:00

但是当我加载页面时,它会显示事件将在1小时内开始。如何处理这种行为?

另外,我想再问一件事 - 比方说我在19:45h开始了一个事件。如何确保有人在加利福尼亚浏览我的网站(比荷兰落后9小时)会看到适当的时间(这个人应该在10:45而不是19:45看到活动的开始)。

谢谢,我没有做过时间/区域的认真工作。

PS:我用于该应用的服务器位于阿姆斯特丹(DigitalOcean服务器)。

2 个答案:

答案 0 :(得分:0)

这可能是因为您在db表中保存utc的时间并将应用程序时间设置为GMT。检查rails控制台中的Time.zone。

答案 1 :(得分:0)

除非您在应用配置中明确指定,否则Rails可能会使用您服务器的时区。

为了支持能够在不同时区呈现适当时间的行为,您需要了解哪个TZ用户(正确显示)。

为此您有两个选择:

选项B (后端+前端)

  • 以UTC格式存储数据库
  • 将应用程序的默认时区设置为UTC(这将使其以UTC格式呈现)
  • 在前端使用JS将记录的日期时间转换为用户的时区(您可以使用Moment Timezone JS library

选项B (所有服务器端)

  • 以UTC格式存储数据库
  • 获取用户的时区(即在用户个人资料设置中存储用户的时区)
  • 将UTC日期时间从记录转换为用户' s时区并呈现

我建议选项A ,特别是如果您没有用户配置文件,这可能是构建此功能的唯一可行方法。

相关问题