Rails上周日与任何DateTime有关

时间:2011-11-11 03:54:53

标签: ruby-on-rails ruby datetime

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

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

有什么想法吗?我有点卡住了。

2 个答案:

答案 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_occurringnext_occurringDateAndTime::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,所以不会对日期进行任何更改。