2

私は、日付範囲に基づいて年の「季節」を決定することになっているスクリプトに取り組んでいます:

例えば:

January 1 - April 1: Winter
April 2 - June 30: Spring
July 1 - September 31: Summer
October 1 - December 31: Fall

これを行うための最良の方法(またはルビーの最良の方法)がどのように行われるかはわかりません。他の誰かがこれを行う方法に出くわしましたか?

4

4 に答える 4

6

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
于 2013-03-14T17:28:55.260 に答える
2

範囲と Date オブジェクトを試すことができます:

http://www.tutorialspoint.com/ruby/ruby_ranges.htm

于 2013-03-14T16:33:20.363 に答える
1

範囲なし。

  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
于 2013-06-07T17:26:16.287 に答える