ruby-on-rails-3 - 在 Rails 中比较 Time.now 但忽略年份?

标签 ruby-on-rails-3 date activerecord time

我的 Rails 3 应用程序中有以下代码:

  scope :active, lambda {
    where("starts_at <= ? AND ends_at >= ?", Time.now.utc, Time.now.utc)
  }
  scope :since, lambda { |hide_time|
    where("updated_at > ? OR starts_at > ?", hide_time.utc, hide_time.utc) if hide_time
  }

  def self.display(hide_time)
    active.since(hide_time)
  end

但是,无论年份是否与当前年份匹配,我都想返回结果。只要日期和月份匹配就可以了。这可能吗?
starts_atends_at列是 datetime格式化。因此,即使我没有在表单中设置一年,它们也会自动包含一年:
<%= f.datetime_select :starts_at, :order => [:day, :month], :discard_year => true %>

任何指针将不胜感激。

最佳答案

正如 Old Pro 在评论中指出的那样,这确实对闰年造成了问题。您可能希望将每一年的每一天拆分为 MONTH(x) 和 DAYOFMONTH(x)。

您可以使用 dayofyear 功能
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofyear

scope :active, lambda {
    where("dayofyear(starts_at) <= dayofyear(?) AND 
      dayofyear(ends_at) >= dayofyear(?)", Time.now.utc, Time.now.utc)
  }
  scope :since, lambda { |hide_time|
    where("dayofyear(updated_at) > dayofyear(?) OR 
      dayofyear(starts_at) > dayofyear(?)", hide_time.utc, hide_time.utc) if hide_time
  }

mssql它是

datepart(dayofyear,date)



postgres它是

extract(DOY from date)



sqlite3它是

strftime("%j",date)

关于ruby-on-rails-3 - 在 Rails 中比较 Time.now 但忽略年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357033/

相关文章:

ruby - 在 Rails 中创建通用表单

ruby-on-rails-3 - Rails 3 public_activity,销毁记录

php - 将日期从荷兰语转换为英语

ruby-on-rails - 双嵌套模型形式

ruby-on-rails-3 - Rails Bootstrap Navbar和精炼厂CMS

java - 加快日期模式匹配速度

date - Oracle APEX - 根据包含的值有条件地更改交互式报表上单元格中的文本颜色?

ruby-on-rails - 有条件的 own_to : only comments for post with published flag set TRUE

ruby-on-rails - 如何为 rails-settings 插件创建表单

ruby-on-rails - rails 选择包含