是一个时间点:一小时内,今天内,明天晚于明天或过去?

时间:2015-09-29 08:40:58

标签: ruby-on-rails ruby ruby-on-rails-4

我想用相对的单词显示结束时间,例如"你还有2个小时的时间来回答民意调查"。

下面有什么问题?当有例如剩下54分钟,它返回" 54小时"。

    minute_diff = ((datetime_value - DateTime.current) * 24 * 60).to_i

    case 
    when minute_diff < 0 # past time
        [nil, "closed"]
    when minute_diff.between?(0, 59) # within an hour
        [minute_diff, "minutes"]
    when datetime_value.today? # today
        number_of_hours = (minute_diff / 60)
        [number_of_hours, "hours"]
    when datetime_value.to_date == DateTime.current.tomorrow.to_date # tomorrow
        [1, "day"]
    when datetime_value.to_date > DateTime.current.tomorrow.to_date # later than tomorrow
        number_of_days = (datetime_value.to_date - DateTime.current.to_date).to_i
        [number_of_days, "days"]
    end

(非常感谢关于更好地返回相对时间的建议)

2 个答案:

答案 0 :(得分:3)

关于你的第二个问题(提供更好的方法),你应该使用已经存在的问题。

if (t = DateTime.current) < datetime_value
  "You have #{distance_of_time_in_words(t, datetime_value)} left to answer the poll".
else
  "Closed"
end

如果你想处理l18n,我最喜欢的是"twitter-cldr" gem

答案 1 :(得分:2)

我认为rails日期助手足够了。

if datetime_value > 0
  s = "You have #{time_ago_in_words(datetime_value)} left to answer the poll"
else
  s = "Closed"
end