【问题标题】:Rails Date compared to Date.todayRails 日期与 Date.today 相比
【发布时间】:2011-01-04 09:48:44
【问题描述】:

我有一个 Date 格式的birth_date 变量。我想将它与 Date.today 进行比较,如下所示。问题是它返回错误,因为它也想比较年份。这是生日所以我不在乎年份只是想看看birth_date(月和日)是否等于Date.today.day.month。

有什么想法吗?

bdays = Soldier.find(:all, :conditions => ["birth_date LIKE ?", Date.today] )

【问题讨论】:

    标签: ruby-on-rails date conditional-statements


    【解决方案1】:

    您需要拆分日期,因为您想忽略年份。您将需要使用您的 SQL 提供程序提供的一些功能(下面的示例使用 MySQL):

    bdays = Soldier.find(:all, :conditions => ["DAY(birth_date) = ? AND MONTH(birth_date) = ?", Date.today.day, Date.today.month])
    

    如果你使用 SQLite(rails 的默认数据库),它会有点复杂,因为它们没有真正的日期类型:

    bdays = Soldier.find(:all, :conditions => ["STRFTIME('%d', birth_date) = ? AND STRFTIME('%m', birth_date) = ?", Date.today.day, Date.today.month])
    

    【讨论】:

    • 嗨,这是一个很大的帮助,非常感谢。我仍然遇到的一个问题是 SQLite 的 STRFTIME('%m',birth_date) = ?将一月份返回为 01,然后 Date.today.month 作为 1 导致错误。我已经到处搜索,试图找到有这个问题的其他人。
    【解决方案2】:

    我想我会添加 postgres:

    Soldier.where("EXTRACT(DAY FROM birth_date) = ? AND EXTRACT(MONTH FROM birth_date) = ?", Date.today.day, Date.today.month)

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 2014-11-13
      • 2011-01-10
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2011-12-26
      相关资源
      最近更新 更多