Rails から現在の週番号を取得する方法と、それを操作する方法を知りたいです。
- 週番号を日付に変換します。
- 週数に基づいて間隔をあけます。
ありがとう。
Rails から現在の週番号を取得する方法と、それを操作する方法を知りたいです。
ありがとう。
使用strftime
:
%U
-その年の週番号。週は日曜日から始まります。(00..53)
%W
-その年の週番号。週は月曜日から始まります。(00..53)
Time.now.strftime("%U").to_i # 43
# Or...
Date.today.strftime("%U").to_i # 43
日付に43週間(または日、年、分など)を追加する場合43.weeks
は、ActiveSupportが提供するを使用できます。
irb(main):001:0> 43.weeks
=> 301 days
irb(main):002:0> Date.today + 43.weeks
=> Thu, 22 Aug 2013
irb(main):003:0> Date.today + 10.days
=> Sun, 04 Nov 2012
irb(main):004:0> Date.today + 1.years # or 1.year
=> Fri, 25 Oct 2013
irb(main):005:0> Date.today + 5.months
=> Mon, 25 Mar 2013
strftime("%U")
とから離れたくなるでしょう"%W"
。
代わりに、を使用してDate.cweek
ください。
問題は、週番号を取得して日付に変換したい場合、 にstrftime
戻すことができる値が得られないことですDate.commercial
。
Date.commercial
1 ベースの値の範囲が期待されます。
Date.strftime("%U|%W")
0 ベースの値を返します。あなたはそれを+1するだけでいいと思うでしょう。この問題は、53 週ある年の終わりにあなたを襲います。(さっきのことのように…)
たとえば、2015 年 12 月末と、週番号を取得するための 2 つのオプションの結果を見てみましょう。
Date.parse("2015-12-31").strftime("%W") = 52
Date.parse("2015-12-31").cweek = 53
それでは、その週番号を日付に変換する方法を見てみましょう...
Date.commercial(2015, 52, 1) = Mon, 21 Dec 2015
Date.commercial(2015, 53, 1) = Mon, 28 Dec 2015
に渡す値をやみくもに +1 するとDate.commercial
、他の状況では無効な日付になってしまいます。
たとえば、2014 年 12 月:
Date.commercial(2014, 53, 1) = ArgumentError: invalid date
その週番号を日付に戻す必要がある場合、唯一確実な方法は を使用することDate.cweek
です。
date.commercial([cwyear=-4712[, cweek=1[, cwday=1[, start=Date::ITALY]]]]) → date
Creates a date object denoting the given week date.
The week and the day of week should be a negative
or a positive number (as a relative week/day from the end of year/week when negative).
They should not be zero.
間隔について
require 'date'
def week_dates( week_num )
year = Time.now.year
week_start = Date.commercial( year, week_num, 1 )
week_end = Date.commercial( year, week_num, 7 )
week_start.strftime( "%m/%d/%y" ) + ' - ' + week_end.strftime("%m/%d/%y" )
end
puts week_dates(22)
EG: 入力 (週番号): 22
出力: 06/12/08 - 06/19/08
クレジット: Siep Korteling http://www.ruby-forum.com/topic/125140