Rails jquery datepicker timezones
我在尝试使用Rails处理JQuery日期/时间选择器中的时区时遇到问题。 datepicker,正确显示本地时区。问题出现了,当我将所选日期保存到我的数据库中时,rails将其保存为UTC时间,即使时间在客户端的时区中。当我尝试将时间转换为utc(Time.zone.parse(params [:time])。utc)时,它给出了与params [:time]相同的值,这是本地时间。
我不想在environment.rb文件中更改config.time_zone的设置,因为我不希望将时间保存在服务器的本地时区中。
我想要做的是接收本地时间,并将其转换为utc,这样我就可以在服务器上安排一个cron作业,其时间设置为utc。我想节省数据库中的时间,作为用户的本地时区...但我无法找到获取客户端时区的方法!
除了在datepicker上添加时区作为选项之外,我还有其他选择吗?
DateTime Picker为您的视图提供正确的用户时间 - 之后由您来解析时间,调整用户的时区,并通过添加或减去适当的小时数来相应地安排您的cron作业。 这是我如何去做的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # convert your param from a datepicker string to time: start_time=DateTime.strptime(params[:start_time],"%m/%d/%Y %H:%M:%S").to_time # datepicker gives times in UTC to your server *BUT* it appears in the local time to the user. Make sure to adjust for this time difference. start_time = start_time.in_time_zone(current_user.time_zone) # I let users pick their time zone. # account for DST. does this work? I think so. offset = (start_time.utc_offset)/60/60 # now adjust by the hours offset. you likely want to keep the time in utc for your database... adjusted_start_time = (start_time-offset.hours).utc |
来自另一个SO帖子的相关信息转换UTC到Rails 3中的本地时间:
1 2 3 4 5 | # Rails has it's own names. See them with: rake time:zones:us To see other zone-related rake tasks: rake -D time # So, to convert to EST, catering for DST automatically: Time.now.in_time_zone("Eastern Time (US & Canada)") |