在我的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)