私は、日付範囲に基づいて年の「季節」を決定することになっているスクリプトに取り組んでいます:
例えば:
January 1 - April 1: Winter
April 2 - June 30: Spring
July 1 - September 31: Summer
October 1 - December 31: Fall
これを行うための最良の方法(またはルビーの最良の方法)がどのように行われるかはわかりません。他の誰かがこれを行う方法に出くわしましたか?
9月31日?
leifgが示唆したように、ここにコードがあります:
require 'Date'
class Date
def season
# Not sure if there's a neater expression. yday is out due to leap years
day_hash = month * 100 + mday
case day_hash
when 101..401 then :winter
when 402..630 then :spring
when 701..930 then :summer
when 1001..1231 then :fall
end
end
end
定義したら、たとえば次のように呼び出します。
d = Date.today
d.season
範囲と Date オブジェクトを試すことができます:
範囲なし。
require 'date'
def season
year_day = Date.today.yday().to_i
year = Date.today.year.to_i
is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
if is_leap_year and year_day > 60
# if is leap year and date > 28 february
year_day = year_day - 1
end
if year_day >= 355 or year_day < 81
result = :winter
elsif year_day >= 81 and year_day < 173
result = :spring
elsif year_day >= 173 and year_day < 266
result = :summer
elsif year_day >= 266 and year_day < 355
result = :autumn
end
return result
end