現在、2 つの日付を減算するメソッドを作成しようとしています。見た目は次のとおりです:(成熟は未来の時間です)
def time_remaining
# If validated, return time between now and number of days from validation.
if self.is_validated?
return (self.maturity > Time.now) ? (self.maturity - Time.now) : 0
# If not validated, return number of days converted in time
else
return self.nb_days.nil? ? 0 : self.nb_days.days
end
end
そして私のビューでは、これをやっています:
distance_of_time_in_words(project.time_remaining)
これは機能しますが、実際にやろうとしていることではありません。減算の結果が1日未満の場合は時間数を取得し、減算の結果が1日未満の場合は分数を取得しますは 1 時間未満であり、結果が 1 日を超える場合は日数を取得します。
成熟度は次の形式で表されます: Wed, 27 Nov 2013 12:42:09 UTC +00:00
. どうすればそれができるかについて、少なくともヒントを教えてください。
編集 :
私はこのようなことを試しましたが、それは本当に厄介です:
def time_remaining
# If validated, return time between now and number of days from validation.
if self.is_validated?
if (self.maturity > Time.now)
if ((self.maturity - Time.now)/1.day < 1)
return (self.maturity - Time.now)/1.day.
elsif ((self.maturity - Time.now) < 1.hour)
return (self.maturity - Time.now)/1.min
else
return (self.maturity - Time.now)
end
else
0
end
# If not validated, return number of days converted in time
else
return self.nb_days.nil? ? 0 : self.nb_days.days
end
end
ここを外すのがポイントですdistance_of_time_in_words
。
解決策: @Rafał Cieślak と gem time_diff に感謝します。これが私がやったことです:
def remaining_time (project)
if project.is_validated?
if ((project.maturity - Time.now)/1.day >= 1)
result = Time.diff(project.maturity, Time.now, '%d')
return result[:diff]
elsif ((project.maturity - Time.now)/1.hour > 1 && (project.maturity - Time.now)/1.hour < 24)
result = Time.diff(project.maturity, Time.now, '%H')
return result[:diff]
elsif ((project.maturity - Time.now)/1.hour < 1)
result = Time.diff(project.maturity, Time.now, '%N')
return result[:diff]
end
else
return project.nb_days.nil? ? 0 : project.nb_days.days
end
end