Rails activerecord:如何通过datetime字段查询记录?

5

我正在尝试通过类型为datetime的字段start_date ,在TimeSlot表中查询记录。到目前为止,以下是我的尝试失败的:

TimeSlot.where(:start_date => DateTime.new(2010, 9, 1))

TimeSlot.where(:start_date => DateTime.new(2010, 9, 1).to_s)

TimeSlot.where(:start_date => "2010-09-08")

TimeSlot.where(:start_date => "2010-09-08 00:00:00")

我很感激您的帮助。


可能是重复的问题:查找与今天日期匹配的DateTime记录 - Ruby on Rails - Lukas Knuth
3个回答

1

你的查询看起来不错。

你确定在数据库中有匹配的行吗?

要进行调试,请查看你的日志/development.log文件。

添加:

问题可能是时区。你的查询正在使用服务器的时区,而你的数据可能存储在不同的时区。


0

我猜这也和时区有关。Rails会自动将数据库中的所有内容转换为UTC时间。如果没有偏移量,查询1和4应该可以正常工作。


0

来自 rubyonrails.org 的答案

Client.where("created_at >= :start_date AND created_at <= :end_date", {:start_date => params[:start_date], :end_date => params[:end_date]})

或者

Client.where("created_at IN (?)", (params[:start_date].to_date)..(params[:end_date].to_date))

如果您的 start_date 是一个日期字段,以下是查询所有 TimeSlot 开始于 "2010-09-08" 的代码。

TimeSlot.where("start_date >= ? AND start_date <= ?", "2010-09-08", "2010-09-08")

如果你的 start_date 是一个日期时间字段。
TimeSlot.where("start_date >= ? AND start_date <= ?", "2010-09-08", "2010-09-09")

因为日期时间从00:00:00开始计算


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接