我需要查找在特定日期创建的所有记录。 我只提供标准型号日期时间戳。 我将如何在activerecord中执行此操作?
答案 0 :(得分:3)
跟进贾斯汀的回答
where("extract(dow from created_at) = ?", Date.today.wday)
这就是我在postgres应用程序中使用的内容。这将查找在今天的同一天创建的所有记录。例如,如果今天是星期二,它会在周二找到所有记录。
答案 1 :(得分:2)
您可以在MySQL中使用DAYOFWEEK函数并将其传递给:conditions选项。假设您有一个名为Item的模型,这将返回在星期日创建的所有项目:
Item.all(:conditions => ['dayofweek(created_at)=?',1])
使用Postgres,您可以使用to_char执行类似操作。
请注意,使用这样的函数可能会使数据库执行全表扫描,因为至少MySQL不支持向函数添加索引。如果这是您预期经常做的事情,您可能需要考虑将周日提取到另一列。
答案 2 :(得分:1)
获取自Unix Epoch以来的秒数。 Time.to_i
在Ruby中执行此操作。
使用7的模数来获得星期几(0到6)。
dayOfWeek = (epochseconds / 86400 ) % 7;
答案 3 :(得分:0)
如果您不反对使用红宝石,可以尝试一下。
array.select { |arr| ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"].include?(arr.created_at.strftime('%A'))
我最初尝试使用另一个答案中建议的dayofweek
。
我遇到的问题是,好像我的sql服务器正在使用UTC时间,而我的rails服务器正在使用美国东部。晚上8点之后创建的记录将被提取,而之前发生的记录将被视为前一天。
这是另一个相关的问题: How to filter by day of week in Rails 4.2 and sqlite?