我如何从红宝石中获得当前的工作日?

ahm*_*met 9 ruby datetime ruby-on-rails ruby-on-rails-3

例如今天是28/07/2011如何在星期一的第一天获得星期一,即2011年7月25日在红宝石

Cho*_*ett 33

>> Date.today.beginning_of_week.strftime('%d/%m/%Y')
#=> 25/07/2011
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Rails下的时间日期类;有关格式化选项的信息,请参阅strftime.

  • 我会注意到这是一个很好的解决方案,只要你有ActiveSupport(在Rails中),听起来就像你做的那样.否则,你需要关注@ Phrogz的[建议](http://stackoverflow.com/questions/6858908/how-can-i-get-the-current-weekday-beginning-in-ruby/6859418#6859418)下面. (3认同)

Phr*_*ogz 27

没有Rails/ActiveSupport:

phrogz$ irb
> require 'date'
> now = Date.today
#=> #<Date: 2011-07-28 (4911541/2,0,2299161)>
> sunday = now - now.wday
#=> #<Date: 2011-07-24 (4911533/2,0,2299161)>
> monday = now - (now.wday - 1) % 7
#=> #<Date: 2011-07-25 (4911535/2,0,2299161)>
> monday.iso8601
#=> "2011-07-25"
> monday.strftime('%d/%m/%Y')
#=> "25/07/2011"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Date标准库中的类.

作为一种方法包装:

require 'date'
# For weekdays to start on Monday use 1 for the offset; for Tuesday use 2, etc.
def week_start( date, offset_from_sunday=0 )
  date - (date.wday - offset_from_sunday)%7
end

sun = Date.parse '2011-07-24'
week_start(sun,0).strftime('%a, %b-%d')  #=> "Sun, Jul-24"
week_start(sun,1).strftime('%a, %b-%d')  #=> "Mon, Jul-18"
Run Code Online (Sandbox Code Playgroud)