在 Rails3 中,如何检索所有日期为今年的记录?我想检索今年“日期”所在的所有“项目”。
我怀疑它会类似于:
@projects_this_year = Project.where(:date.Time.year == Time.now.year)
or
@projects_this_year = Project.where(:date >= ?, Time.now.year)
我正在阅读文档,但还没有完全弄清楚这一点。
在 Rails3 中,如何检索所有日期为今年的记录?我想检索今年“日期”所在的所有“项目”。
我怀疑它会类似于:
@projects_this_year = Project.where(:date.Time.year == Time.now.year)
or
@projects_this_year = Project.where(:date >= ?, Time.now.year)
我正在阅读文档,但还没有完全弄清楚这一点。
你可以做这样的事情(假设一个 MySQL DB):
@projects_this_year = Project.where("year(date) = ?", Time.now.year)
或更好:
@projects_this_year = Project.where("year(date) = year(utc_timetamp())")
这不需要加载时间库。
供参考:http ://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
编辑
如果您希望它独立于数据库,那么您可以执行以下操作:
@projects_this_year = Project.where("date >= ?", Time.now.at_beginning_of_year)
如果您经常需要特定的月份或年份,或者通过扩展@David 的答案,您也可以在模型中使这种动态变化:
def self.get_year(date)
# sanitize if params
safe = ['2011', '2012', '2013']
if safe.include?(date)
where("year(created_at) = ?", Time.parse("#{date}-01-01 11:11:11 -0500").year)
else
scoped
end
end
前任:
Product.get_year('2012')
注意要让它在heroku上工作,请更改以下内容:
where("date_part('year', created_at) = ?", Time.parse("#{date}-01-01 11:11:11 -0500").year
http://www.java2s.com/Code/PostgreSQL/Date-Timezone/datepartyeardate.htm