Ruby扩展Date类以添加新方法

时间:2012-09-09 22:35:54

标签: ruby

我是Ruby的新手,我正在尝试扩展Date类,以添加一个将返回本月第一个星期日的函数。这是为了帮助绘制月度日历。所以说九月从星期六开始。然后我希望这个函数返回8月26日,因为这是日历首先需要绘制的日期。

我在irb中工作:

fs = Date.today - Date.today.mday + 1
fs = fs - fs.wday

所以现在我正在尝试将日期类扩展为

class Date
  def first_of_month
    return Date.new(self.year, self.month, 1)
  end

  def first_sunday_of_first_week
    return self.first_of_month - self.wday
  end
end

本月的第一个方法似乎工作正常。 本月的第一个星期天没有。我认为它与Date.new缺失有关,但无论我怎样尝试重做它,它似乎都不起作用。我正在制作一个Sinatra应用程序,所以我没有执行此操作的rails功能。

此处的函数返回两个方法的月中的第一个,并且不返回该月的第一个星期日。

如何正确使用此扩展方法?感谢

更新:

class Date
  def first_of_month
    return Date.new(self.year, self.month, 1)
  end

  def first_sunday_of_first_week
    first_of_month - first_of_month.wday
  end
end

这似乎有效,但它是正确的还是我强迫工作超过需要。这不是为了Date.new而创建的吗?

1 个答案:

答案 0 :(得分:2)

您不需要self.method,也不需要return,您只需编写method即可使其更简洁。 问题是你只需减去当前日期的日期,但你需要减去当月第一天的日期

def first_sunday_of_first_week
  first_of_month - first_of_month.wday
end

这对我有用。

要更新:您可以通过避免使用first_of_month方法并按以下方式执行此操作,使其效率提高两倍:

def first_sunday_of_first_week
    first = Date.new(year, month, 1)
    first - first.wday
end

您的方法调用first_of_month方法两次,因此日期被创建两次,而在我的版本中,只创建了一个实例。如果性能是一个问题,那么效率会略高一些。