我目前正在尝试创建一个将减除两个日期的方法。如下所示:(成熟是一个未来的时期)
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)这是可行的,但这并不是我真正想要做的,我想要的是,如果减法运算的结果小于一天,就检索若干小时;如果减法结果小于一小时,则检索若干分钟;如果结果等于一天以上,则检索若干天。
成熟度采用这种格式: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发布于 2013-09-05 12:19:33
这是我入侵得很快的东西。您需要安装比较 gem,并使用以下方法作为帮助器(而不是在您的模型中)。
def time_remaining(time_start, time_end)
diff_hash = Time.diff(time_start, time_end)
diff_hash.delete :diff
output = []
diff_hash.each do |key, value|
output.push(pluralize(value, key.to_s)) if value > 0
end
output.join(', ')
end示例:
>> time_remaining 2.days.ago.change(min: 58, hour: 15), Time.now
=> "1 day, 20 hours, 19 minutes, 24 seconds"
>> time_remaining 34.minutes.ago.change(sec: 15), Time.now
=> "33 minutes, 53 seconds"https://stackoverflow.com/questions/18634957
复制相似问题