【问题标题】:Model creation within timezone with Rails使用 Rails 在时区内创建模型
【发布时间】:2013-11-27 23:15:29
【问题描述】:

所以...我正在尝试在地图上创建东西。有一个日期和时间与该事物相关联,但它目前正在以 1:1 的比例保存。所以,如果我保存一些东西并给它一个日期2013-11-28 @ 12:00 pm,它会以那个特定的时间保存到数据库中。它应该保存 UTC...所以2013-11-28 @ 18:00 pm 在我的情况下。

我有一个用于时区的 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 是答案...我试图坚持使用原生 Rails 的东西,但 Chronic 实在是太棒了。 Chronic.time_class = ActiveSupport::TimeZone.create(#timezone fetched by google),然后在模型中,所有这些解析都更改为Chronic.parse。他们都...

标签: ruby-on-rails activerecord google-maps-api-3 timezone


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多