27

Rails から現在の週番号を取得する方法と、それを操作する方法を知りたいです。

  1. 週番号を日付に変換します。
  2. 週数に基づいて間隔をあけます。

ありがとう。

4

4 に答える 4

48

使用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
于 2012-10-25T19:18:34.003 に答える
34

strftime("%U")とから離れたくなるでしょう"%W"

代わりに、を使用してDate.cweekください。

問題は、週番号を取得して日付に変換したい場合、 にstrftime戻すことができる値が得られないことですDate.commercial

Date.commercial1 ベースの値の範囲が期待されます。 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です。

于 2016-01-05T17:13:26.927 に答える
5
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

于 2012-10-25T19:29:26.070 に答える