【问题标题】:Rails query based on User Timezone基于用户时区的 Rails 查询
【发布时间】:2016-04-01 00:15:57
【问题描述】:

我需要根据用户时区 (EST) 进行查询,目前它采用 UTC。我有一个日期范围过滤器,用户可以通过它选择一个日期范围,根据显示的相应结果。

我正在使用 ransack gem 进行搜索

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

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

表格看起来像

.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 默认方法都提供此功能?

【问题讨论】:

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


    【解决方案1】:

    这是我在项目中使用的。它没有使用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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多