使用Rails在时区内创建模型



所以。。。我正试图在地图上创造事物。这件事有一个相关的日期和时间,但目前保存为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]}&timestamp=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]}&timestamp=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

相关内容

  • 没有找到相关文章

最新更新