我是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而创建的吗?
答案 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
方法两次,因此日期被创建两次,而在我的版本中,只创建了一个实例。如果性能是一个问题,那么效率会略高一些。