如何处理Rails应用程序中的时间差



在我的Rails应用程序中,我想在数据库中存储用户的last_login时间。然后我想根据用户的本地时间显示last_login时间给用户(即,如果用户现在在加拿大,它应该是X,如果用户现在在澳大利亚,它应该是Y)。

问题1

您建议如何处理时差?我应该在数据库中存储翻译为UTC的last_login,并在显示时将其再次翻译为当地时间,还是有更好的方法?

问题2

如何确定显示last_login的本地时区?

我认为你是正确的存储last_login_at在UTC(或任何服务器时间是)。默认情况下,它将存储在该时间内。然后您可以将其转换为用户本地时间:

user.last_login_at.in_time_zone('Eastern Time (US & Canada)')

在Rails Api中你可以找到更多关于时区和时间的信息。

要确定用户的时区,您可以使用一些GeoIP工具,例如这个(按照那里的描述)。但这并不是100%准确的检测。当用户注册时,要求用户选择时区的最可靠的方法。

要收集所有时区,可以运行:

ActiveSupport::TimeZone.all.map(&:name)

相关内容

  • 没有找到相关文章

最新更新