所以。。。我正试图在地图上创造事物。这件事有一个相关的日期和时间,但目前保存为1:1。因此,如果我保存一些东西并给它一个2013-11-28 @ 12:00 pm
的日期,它就会在特定的时间保存到数据库中。它应该拯救UTC。。。所以在我的情况下是CCD_ 2。
我有一个时区的around_filter。。。
class ApplicationController < ActionController::Base
around_filter :user_time_zone, if: :current_user
private
def user_time_zone(&block)
Time.use_zone(current_user.location, &block)
end
end
所以,一旦这个东西被救了。。。它被适当地时间分区并且显示为2013-11-28 @ 04:00 am
。
我想在设置时间时使用Time.use_zone函数,但这也不起作用。我正在使用谷歌来获取地图上的时区。。。
JSON.load(open("https://maps.googleapis.com/maps/api/timezone/json?location=#{params[:lat]},#{params[:lng]}×tamp=1331161200&sensor=false"))["timeZoneId"]
给我一个合适的时区。。。但我似乎无法在保存过程中应用它。这可能与模型有关?我有单独的日期和时间字段。。。我把它们组合在模型中:
before_create :convert_to_start
# Start
def startDate
start.strftime("%d/%m/%Y") if start.present?
end
def startDate=(date)
# Change back to datetime friendly format
@startDate = Date.parse(date).strftime("%Y-%m-%d")
end
def startTime
start.strftime("%I:%M%p") if start.present?
end
def startTime=(time)
# Change back to datetime friendly format
@startTime = Time.parse(time).strftime("%H:%M:%S")
end
def convert_to_start
self.start = DateTime.parse("#{@startDate} #{@startTime}")
end
我想我需要把从谷歌得到的时区传给模型中的那些方法,但我似乎不知道如何与它们交互。
Chronic gem解决了这个问题。
tz = JSON.load(open("https://maps.googleapis.com/maps/api/timezone/json?location=#{params[:event][:lat]},#{params[:event][:lng]}×tamp=1331161200&sensor=false"))["timeZoneId"]
Chronic.time_class = ActiveSupport::TimeZone.create(tz)
然后在模型中。。。所有这些解析都变成
def startDate=(date)
# Change back to datetime friendly format
@startDate = Chronic.parse(date).strftime("%Y-%m-%d")
end