Ruby on rails 给定时间戳-如何返回最近的单位和公制,,,例如:13分钟,1小时

Ruby on rails 给定时间戳-如何返回最近的单位和公制,,,例如:13分钟,1小时,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,给定一个时间戳,我希望有一个方法返回正确的单位(秒、小时、分钟)和该单位的正确度量 例如,对于时间戳: 1 sec ago - Unit: SEC, Metric: 1 20 secs ago - Unit: SECS, Metric: 20 1 hour ago - Unit: HOUR, Metric: 1 3 hour ago - Unit: HOURS, Metric: 3 25 hours ago - Unit: DAY, Metric: 1 50 hours ago - Unit:

给定一个时间戳,我希望有一个方法返回正确的单位(秒、小时、分钟)和该单位的正确度量

例如,对于时间戳:

1 sec ago - Unit: SEC, Metric: 1
20 secs ago - Unit: SECS, Metric: 20
1 hour ago - Unit: HOUR, Metric: 1
3 hour ago - Unit: HOURS, Metric: 3
25 hours ago - Unit: DAY, Metric: 1
50 hours ago - Unit: DAYS, Metric: 2

对于这种方法,我只需要去支持,秒,小时和天。不是几个月。想法?

大多数逻辑已经作为Rails的助手:

可能是这样的:

定义单词和单位(从时间到时间=0)

from_time=from_time.to_time如果是from_time.response_to?(:to_time) to_time=to_time.to_time如果to_time.response_to?(:to_time) 距离单位为分钟=((到时间-从时间).abs)/60)。整轮 距离(以秒为单位=((到时间-从时间).abs)。四舍五入


结束

谢谢,但是如何访问给定此函数的:metric:unit变量?您会得到一个哈希值,比如myvar=words_和_units(Time.now)=>{:metric=>1,:unit=>'SEC'},然后您可以使用myvar[:metric]或myvar[:unit],或者您可以使用一个方便的方法为您提取它,比如def metric(从_Time)words_和_units(from_time)[:metric]结束,把它包得又好又紧
case distance_in_minutes
  when 0..1

    case distance_in_seconds
      when 0..59   then {:metric => distance_in_seconds, :unit => 'SEC'}
      else             {:metric => 1, :unit => 'MIN'}
    end

  when 2..44           then {:metric => distance_in_minutes, :unit => 'MIN'}
  when 45..89          then {:metric => 1, :unit => 'HOUR'}
  when 90..1439        then {:metric => (distance_in_minutes.to_f / 60.0).round, :unit => 'HOUR'}
  when 1440..2529      then {:metric => 1, :unit => 'DAY'}
  when 2530..43199     then {:metric => (distance_in_minutes.to_f / 1440.0).round, :unit => 'DAY'}
  else
    raise WayToLongError
end