Rails上周日与任何DateTime有关

使用Rails 3应用程序。 给定DateTime,我需要为上一个星期日生成日期时间。 如果DateTime是星期日,那么我希望那个星期天本身回来。 这是一些例子:

 2011年11月7日=> 2011年11月6日
 2011年11月6日=> 2011年11月6日
 2011年11月5日=> 2011年10月30日

有任何想法吗? 我有点卡住了。

class DateTime def previous_sunday self - wday end end 

…但这很容易,没有理由将它修补到课堂上:)

 irb(main):001:0> require 'date'; now = DateTime.now #=> # irb(main):002:0> sunday = now - now.wday #=> # 

对于任何星期日, wday (工作日)将为0 ,因此不会对日期进行任何更改。

Rails有一种方便的方法来计算一周的开头。

 irb(main):001:0> Date.today.beginning_of_week(:sunday) #=> Sun, 16 Dec 2012 

有关其他可能性,请参阅Date Rails扩展: http : //api.rubyonrails.org/classes/Date.html

更新 :Rails 5.2添加了便捷方法来查找一天的下一个/上一个匹配项。

 [1] pry(main)> Date.today.prev_occurring(:sunday) #=> Sun, 29 Apr 2018 

有关prev_occurringnext_occurring信息,请参阅DateAndTime::Calculations文档。