2016-08-11 79 views
0

快速的问题。我正在使用distance_of_time_in_words帮助器来检查一个对象创建的天数。这工作正常,但我不希望它必须去24小时才算天,但希望它数到“1”天,一旦它是“00:00”Rails DateTime帮手逻辑

eg distance_of_time_in_words(“2016-08-11 11 :00“,”2016-08-12 00:00“)应该是1天,但是13小时

我希望一旦它通过”00:00“它应该算作1天?

+0

请记住,您建议的逻辑强烈依赖于观察者所在的时区。如果您从服务器提供此值,则很可能您的访问者不在同一个时区。 (考虑到......是否需要满足这个任意要求的自定义逻辑和努力真的值得吗?) –

+0

非常真实的会记住这一点...但是现在只能使用我的时区。感谢您指出这一点 –

回答

2

您可以使用

time_ago_in_words(date_item_was_created.at_midnight) 

time_ago_in_words让你放弃加入“现在”时间*,并通过移动创建的,在可追溯至午夜,你会经过一个在接下来的午夜,标记为 。根据API doc,它应该给你一整天的任何时间,这听起来就像你在做什么。

*如果您未比较当前时间,则可以继续使用distance_of_time_in_words。

+0

哦智能智能所有我真正需要的是at_midnight –

0

这就是你的意思,我猜。

def distance_of_time_in_words(time1,time2) 

    d1 = Time.parse(time1.to_s).to_date.strftime("%d").to_i 
    d2 = Time.parse(time2.to_s).to_date.strftime("%d").to_i 
    seconds = Time.parse(time2.to_s)- Time.parse(time1.to_s) 
    hours = seconds/3600 

    if d2-d1 >= 1 
    return "#{(d2-d1).to_s} days" 
    else 
    return "#{hours.to_s} hours" 
    end 

end