如何在Ruby中获取当前工作日的开始日期?

14

例如今天是 2011 年 7 月 28 日,我想在 Ruby 中获取本周的第一天星期一,即 2011 年 7 月 25 日,应该怎么做?


...或者这周的第一天,星期天!;-) - Drew
2个回答

39
>> Date.today.beginning_of_week.strftime('%d/%m/%Y')
#=> 25/07/2011

请参见Rails下的时间日期类以获取更多信息,并参考strftime了解格式选项。


我该如何格式化它,才能呈现 25/07/2011 的样子?还有,你知道我如何使用 datepicker 在 JavaScript 中获取开始的星期吗? - ahmet
编辑格式。但恐怕我无法帮你解决JavaScript的问题。 - Chowlett
3
请注意,只要您有ActiveSupport(在Rails中),这就是一个很好的解决方案,听起来您已经安装了。否则,您需要按照@Phrogz下面的建议进行操作。 - Ben Kreeger

29

没有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"

了解更多,请查看标准库中的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"

这个代码在星期天不起作用,因为你会得到星期一...在星期天之后。 我会把now - now.wday + 1改成两行代码: shift = (now.wday == 0) ? 6 : (now.wday - 1) monday = date - shift - Dale Cooper
1
@DaleCooper 非常感谢您的错误报告。您是完全正确的。虽然可以更简单一些。我已经编辑了我的答案并提供了一个修正版本。 - Phrogz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接