当前位置:  开发笔记 > 后端 > 正文

如何正确转换或查询Rails/MySQL DateTime列的日期范围

如何解决《如何正确转换或查询Rails/MySQLDateTime列的日期范围》经验,为你挑选了2个好方法。

我有一个rails应用程序,我将created_at存储为datetime(标准).我正在构建一个搜索表单,我发现我必须使用find_by_sql来执行一些复杂的子查询.表单有一个日期范围(没有时间)来搜索items_at字段的项目.

我发现的问题是,如果我只传入范围的日期字符串来查询...

... status_changes.created_at between '2009-01-24' and '2009-03-12' ...

我收回了创建日期为2009-01-23 17:10:39 -0800的记录,因为它存储在数据库中,如2009-01-24 01:10:39(UTC)

我如何解决这个问题,以便结果不会返回有问题的记录?

我似乎需要将日期范围转换为UTC特定的,或者告诉find_by_sql根据当前时区进行搜索,而不是将列读取为utc ...

任何接受者?

约翰



1> fivetwentysi..:

现代ActiveRecord的做法是:

Model.where(time_field: date1..date2)



2> Ian Terrell..:

如果你不使用find_by_sql,而是使用find带有:conditions让Rails做替换的子句,它将自动转换所有内容.

Model.find :all, 
  :conditions => ["created_at between ? and ?", start_date, end_date]

最糟糕的情况是,如果Rails被日期混淆,你可以将它们转换为时间,它应该很好地运行:

Model.find :all, 
  :conditions => ["created_at between ? and ?", 
                   start_date.to_time, end_date.to_time]

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有