Rails上周日与任何DateTime有关

Mik*_*ike 29 ruby datetime ruby-on-rails

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

November 7, 2011 => November 6, 2011
November 6, 2011 => November 6, 2011
November 5, 2011 => October 30, 2011

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

Cha*_*esh 45

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

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

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

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

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

请参阅DateAndTime::Calculations有关文档prev_occurringnext_occurring.


Phr*_*ogz 37

class DateTime
  def previous_sunday
    self - wday
  end
end
Run Code Online (Sandbox Code Playgroud)

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

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 (…)>
Run Code Online (Sandbox Code Playgroud)

wday(平日)将0任何星期天,所以在日期没有变化会发生.