使用Rails 3应用程序。给定DateTime,我需要生成上一个星期日的日期时间。如果DateTime是星期日,那么我希望那个星期天本身回来。以下是一些例子:
November 7, 2011 => November 6, 2011 November 6, 2011 => November 6, 2011 November 5, 2011 => October 30, 2011
有什么想法吗?我有点卡住了。
答案 0 :(得分:44)
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_occurring
和next_occurring
的DateAndTime::Calculations
文档。
答案 1 :(得分:35)
class DateTime
def previous_sunday
self - wday
end
end
...但这很容易,没有理由将其修补到课堂上:)
irb(main):001:0> require 'date'; now = DateTime.now
#=> #<DateTime: 2011-11-10T21:10:04-07:00 (…)>
irb(main):002:0> sunday = now - now.wday
#=> #<DateTime: 2011-11-06T21:10:04-07:00 (…)>
任何星期日的wday
(工作日)都是0
,所以不会对日期进行任何更改。