Rails基于用户时区查询

时间:2016-04-01 00:15:57

标签: ruby-on-rails postgresql ruby-on-rails-4 ransack

我需要根据用户时区(EST)进行查询,目前正在使用UTC。我根据相应的结果显示日期范围过滤器,用户根据该过滤器选择日期范围。

我使用ransack gem进行搜索

日期范围 - 2016-03-01至2016-03-31

结果显示在UTS中,显示为2月29日,不应出现

enter image description here

表单看起来像

.well
  = simple_form_for(:report, url: report_create_path, method: :get, html: { class: 'form-horizontal'}) do |f|
    = f.simple_fields_for(:q) do |r|
        = r.input :created_at_gteq, label: 'From', required: false, as: :bootstrap_datepicker
        = r.input :created_at_lteq, label: 'To', required: false, as: :bootstrap_datepicker

我是否需要在此处使用偏移量,或者任何默认的ransack默认方法都提供此功能?

1 个答案:

答案 0 :(得分:0)

这就是我在项目中使用的内容。它没有使用ransack gem,而是使用MongoDB代替postgresql,但它仍然适用于您的项目:

start_date = DateTime.strptime(params[:created_at_gteq], "%m/%d/%Y").change(offset: Time.zone.formatted_offset).utc
end_date = DateTime.strptime(params[:created_at_lteq], "%m/%d/%Y").change(offset: Time.zone.formatted_offset).end_of_day.utc

现在,在我的数据库中,它始终以datetime格式存储。不确定它是否在您的数据库中。如果没有,则删除行末尾的.utc以将其转换为UTC。