在我的Rails应用程序中,我想将用户的last_login
时间存储在数据库中。然后我想根据当地时间向用户显示last_login
时间(如果用户现在在加拿大,则应为X,如果用户现在在澳大利亚则为Y)。
问题1
您如何建议处理时差?我应该在数据库中存储转换为UTC的last_login
,并在显示时将其再次转换为当地时间,还是有更好的方法?
问题2
如何识别显示last_login
的本地时区?
答案 0 :(得分:3)
我认为你在UTC(或任何服务器时间)存储last_login_at
是正确的。默认情况下,它将在该时间内存储。然后您可以将其转换为用户本地时间:
user.last_login_at.in_time_zone('Eastern Time (US & Canada)')
在Rails Api中,您可以找到有关timezones和time with zone的更多信息。
要确定用户时区,您可以使用某些GeoIP工具,例如this one(请按照说明进行操作)。但它不是100%准确的检测。要求用户在注册时选择他的时区的最可靠方式。
要收集您可以运行的所有时区:
ActiveSupport::TimeZone.all.map(&:name)