Redmineで2203年の予定を立てようとしたところ、エラーが出たので原因を調べていました。
どうやら、Railsのdistance_of_time_in_wordsでエラーが出ているようです。
1 def distance_of_time_in_words(
2 from_time, to_time = 0, include_seconds = false)
3 from_time = from_time.to_time if
4 from_time.respond_to?(:to_time)
5 to_time = to_time.to_time if
6 to_time.respond_to?(:to_time)
7 distance_in_minutes =
8 (((to_time - from_time).abs)/60).round
9 distance_in_seconds =
10 ((to_time - from_time).abs).round
8行目あたりの減算でエラーが出ているようです。
実際、以下のような減算をしようとするとエラーが出ます。
1 Time.now - Date.parse("Mon, 01 Aug 2203").to_time
2
ということで、あまりにも長い時間である場合には、
以下のような例外処理で対処するようにしました。
1 module ActionView
2 module Helpers
3 module DateHelper
4 def distance_of_time_in_words_with_limit(
5 from_time, to_time = 0, include_seconds = false
6 )
7 distance_of_time_in_words_without_limit(
8 from_time, to_time, include_seconds)
9 rescue
10 'a long time'
11 end
12 alias_method_chain :distance_of_time_in_words, :limit
13 end
14 end
15 end
これで23世紀の予定も思いのままです。