查找日期范围内的记录

时间:2013-09-12 08:23:11

标签: ruby-on-rails

我设置了search_start_date和search_end_date,然后我想找到属于这个时间范围的记录。但是我没有得到任何回复使用下面的代码。我应该改变什么来使这项工作?

 search_start_date = "01-01-2013"
 search_end_date = "01-12-2013"
 @activities = @employee.activities
 projects = @activities.where("start_date >= ? and end_date =< ?", search_start_date, search_end_date)

编辑:我现在使用search_start_date = DateTime.new(2013, 1, 1),这似乎有效。

3 个答案:

答案 0 :(得分:1)

您使用的日期含糊不清。目前尚不清楚它是MM-DD-YYYY还是DD-MM-YYYY。根据您居住的地区,两者都可能是正确的。使用默认的ruby明确格式YYYY-MM-DD甚至更好,使用实际日期对象。

您还可以将字符串解析为日期,如下例所示。我还纠正了第二个比较运算符,使其更简洁。我不确定两者是否都能奏效。并且不要忘记.all如果您不是故意将其排除在原因之外。

search_start_date = Date.strptime("01-01-2013", "%d-%m-%Y")
search_end_date   = Date.strptime("01-12-2013", "%d-%m-%Y")

projects = @activities.where("start_date >= ? and end_date <= ?", search_start_date, search_end_date).all

答案 1 :(得分:1)

您需要提供&#34;日期&#34;或&#34;时间&#34;对象进入ActiveRecord查询,尝试这样的事情:

 search_start_date = Date.parse("01-01-2013")
 search_end_date = Date.parse("01-12-2013")
 projects = @activities.where("start_date >= ? and end_date =< ?", search_start_date, search_end_date)

答案 2 :(得分:0)

只需修改@derekyau解决方案: -

search_start_date = "01-01-2013".to_date
 search_end_date = "01-12-2013".to_date
 projects = @activities.where("start_date >= ? and end_date =< ?", search_start_date, search_end_date)

编辑:我现在使用search_start_date = DateTime.new(2013, 1, 1),这似乎有效。