簡単な質問かもしれないことに頭を悩ませることができないようです..
日付があるとします..
Fri, 14 Sep 2012 18:37:50 +0200
今月のこの日付が何週目かを調べるにはどうすればよいですか? 1位ですか、2位ですか…?第3?
ありがとう!
簡単な質問かもしれないことに頭を悩ませることができないようです..
日付があるとします..
Fri, 14 Sep 2012 18:37:50 +0200
今月のこの日付が何週目かを調べるにはどうすればよいですか? 1位ですか、2位ですか…?第3?
ありがとう!
ライブラリを使用する理由 Rubyにはデフォルトでそれがあります:
Week number:
The week 1 of YYYY starts with a Sunday or Monday (according to %U
or %W). The days in the year before the first week are in week 0.
%U - Week number of the year. The week starts with Sunday. (00..53)
%W - Week number of the year. The week starts with Monday. (00..53)
> Time.zone.parse("2012-01-01").strftime("%U")
=> "01"
したがって、特定の日付がその年の何週目かがわかれば、その月の何週目かを計算することができます。
> week_of_year_for_first_of_month = Time.zone.parse("2012-07-01").strftime("%U").to_i
> week_of_target_date = Time.zone.parse("2012-07-14").strftime("%U").to_i
> week_occurs_in = week_of_target_date - week_of_year_for_first_of_month + 1
> week_occurs_in # => 2
または方法:
def week_of_month_for_date(date)
my_date = Time.zone.parse(date)
week_of_target_date = my_date.strftime("%U").to_i
week_of_beginning_of_month = my_date.beginning_of_month.strftime("%U").to_i
week_of_target_date - week_of_beginning_of_month + 1
end
> week_of_month_for_date("2012-07-14") # => 2
> week_of_month_for_date("2012-07-15") # => 3
sachin87 には、そのようなことを判断するためのライブラリがあります。
週の数え方によって異なることに注意してください。6月1日が土曜日だとしましょう。6月2日は何週だと思いますか。それは 2 番目の週かもしれませんし、数えられる 1 週間が少なくとも 4 日を含むと考える場合は最初の週かもしれません。
あるいは、6 月 2 日が日曜日であるとすると、その日曜日の週番号は? 間違いなく最初の日曜日です。これがあなたの言いたいことなら、それは実際には簡単です。日付 1 ~ 7 は、常に月の最初の [曜日名] です。日付 8 ~ 14 は常に秒です。等々。ハッシュを作成するだけで、どの月でも機能します。
week_of_monthジェムは少しやり過ぎのように見えます。その実装では、多くの配列分割とArray.include?
チェックが使用されます。
Date
代わりに、ミックスインして目的の動作を得ることができるモジュールをTime
次に示します。
require "active_support/core_ext/date"
require "active_support/core_ext/time"
module WeekCalculator
def week_of_year(mondays = false)
# Use %U for weeks starting on Sunday
# Use %W for weeks starting on Monday
strftime(mondays ? "%W" : "%U").to_i + 1
end
def week_of_month(mondays = false)
week_of_year(mondays) - beginning_of_month.week_of_year(mondays) + 1
end
end
class Date
include WeekCalculator
end
class Time
include WeekCalculator
end
Date.new(2014, 1, 1).week_of_year # => 1
Date.new(2014, 1, 1).week_of_month # => 1
Date.new(2014, 7, 1).week_of_year # => 27
Date.new(2014, 7, 1).week_of_month # => 1
Date.new(2014, 7, 27).week_of_year # => 31
Date.new(2014, 7, 27).week_of_month # => 5
Date.new(2014, 7, 27).week_of_year(:monday) # => 30
Date.new(2014, 7, 27).week_of_month(:monday) # => 4
「2017 年 6 月 30 日は 2017 年 6 月のn回目の金曜日です」と答えるように求められました。
目標日までに発生したすべての曜日名 (月曜日、火曜日など) の配列を作成し、一致した数をカウントすることで、これを解決しました。
target_date = Date.new(2017, 6, 30)
(1..target_date.day).select do |day_of_month|
Date.new(target_date.year, target_date.month, day_of_month).strftime('%A') == target_date.strftime('%A')
end.length