2

在 Rails3 中,如何检索所有日期为今年的记录?我想检索今年“日期”所在的所有“项目”。

我怀疑它会类似于:

@projects_this_year = Project.where(:date.Time.year == Time.now.year)
or
@projects_this_year = Project.where(:date >= ?, Time.now.year)

我正在阅读文档,但还没有完全弄清楚这一点。

4

2 回答 2

3

你可以做这样的事情(假设一个 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)

于 2012-05-24T01:57:47.590 回答
0

如果您经常需要特定的月份或年份,或者通过扩展@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

于 2013-03-21T21:11:45.293 回答