3

たとえば、今日 (3 月 29 日) はその年の 88 日です。次に、月とその月の日を含むハッシュを返します。

{"month" => "March, "day" => 29}

このコードの何が問題なのかよくわかりませんが、常にnil. 何かご意見は?Ruby 1.8.7 p358 を使用しています。

def number_to_date(days)
  date = case days
    when days <= 31  then {"month" => "January",   "day" => days}
    when days <= 59  then {"month" => "February",  "day" => (days - 31)}
    when days <= 90  then {"month" => "March",     "day" => (days - 59)}
    when days <= 120 then {"month" => "April",     "day" => (days - 90)}
    when days <= 151 then {"month" => "May",       "day" => (days - 120)}
    when days <= 181 then {"month" => "June",      "day" => (days - 151)}
    when days <= 212 then {"month" => "July",      "day" => (days - 181)}
    when days <= 243 then {"month" => "August",    "day" => (days - 212)}
    when days <= 273 then {"month" => "September", "day" => (days - 243)}
    when days <= 304 then {"month" => "October",   "day" => (days - 273)}
    when days <= 334 then {"month" => "November",  "day" => (days - 304)}
    when days <= 365 then {"month" => "December",  "day" => (days - 334)}
  end
  return date
end
4

2 に答える 2

5

各句case内で式を使用する場合は、裸のステートメントを使用する必要があります。whenそれ以外の場合、Ruby は を呼び出しますが(days <= 31) === days、これは true になることはありません。

def number_to_date(days)
  date = case
    when days <= 31  then {"month" => "January",   "day" => days}
    when days <= 59  then {"month" => "February",  "day" => (days - 31)}
    # ...
  end
  return date
end

ただし、この実装はうるう日を無視するため、これを行う方が簡単で正しいようです。

def number_to_date(days)
  date = Date.ordinal(Date.today.year, days)
  {"month" => Date::MONTHNAMES[date.month], "day" => date.day}
end
于 2013-03-29T19:01:43.420 に答える
2

ちょっとした構文の微調整が必​​要です。ステートメントdaysから削除します。date = case daysそうしないと、条件ステートメントがdays変数と比較されます。

于 2013-03-29T19:00:04.920 に答える