使用日期查询的Rails不返回边界日期数据

时间:2015-04-13 14:35:28

标签: mysql ruby-on-rails ruby-on-rails-4 activerecord

我正在尝试使用rails从mysql数据库中检索数据。它工作正常,但它不返回接近边界日期的数据。例如

    if params[:from] and params[:to]
  fr = nil;
  fr = DateTime.parse(params[:from]) unless params[:from].empty?
  to = nil
  to = DateTime.parse(params[:to]) unless params[:to].empty?

  if !fr.nil? and !to.nil?
    puts "------------------"
    puts fr
    puts to
    @m = @m.where(start: fr..to)
  end
end
@m.size

记录信息

App 30303 stdout: ------------------
App 30303 stdout: 
App 30303 stdout: 2015-04-12T16:26:16+02:00
App 30303 stdout: 
App 30303 stdout: 2015-04-13T16:26:16+02:00
App 30303 stdout: 
App 30303 stdout: 0

我确信在

之前有一小时的数据
 268129 | 2015-04-13 15:21:53 | 2015-04-13 15:21:53 |

其中first是id,第二列是开始日期

所以确保日期是正确的,因为我可以在日志中看到,特定用户也有数据。我正在尝试从过去24小时内提取数据。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

好的所以问题是代码使用了一个时区,而数据库似乎持有一个没有时区信息的datetime对象,所以我们需要告诉rails花时间并假设它是正常的utc时间,希望这可行。< / p>
if params[:from] && params[:to]
  Time.use_zone('UTC') do
    fr = Time.parse params[:from]
    to = Time.parse params[:to]
  end
  @m = @m.where(start: fr..to)
  end
end
@m.size