Rails 4,Heroku,比较时间不起作用

时间:2014-09-08 01:08:34

标签: postgresql ruby-on-rails-4 heroku time

使用Heroku,我试图将一个地方的保存时间(打开和关闭)与当前时间进行比较,以确定要输出的内容。

代码:

  def get_place_search_display(open_time, close_time)
    open_time_formatted = open_time.strftime('%l:%M %p') if !open_time.nil?
    close_time_formatted = close_time.strftime('%l:%M %p') if !close_time.nil?
    current_time = Time.current #.strftime('%l:%M %p')

    if open_time.nil? || close_time.nil?
      "Closed today"
    elsif current_time < open_time
      "Opens at #{open_time} until #{close_time}"
    elsif current_time >= open_time && current_time <= close_time
      "Open #{open_time} - #{close_time}"
    elsif current_time > close_time
      "Closed at #{close_time} today"
    else
      "Open until #{close_time} today"
    end
  end

返回值示例:

开放时间:上午7:00

关闭时间:8:45 PM,2000-01-01 20:45:00 UTC

当前时间:6:35 PM,2014-09-07 18:35:36 -0700

返回:“今天在2000-01-01 20:45:00 UTC关闭”

使用这种逻辑,比较不起作用的任何想法?

1 个答案:

答案 0 :(得分:1)

关注术语&#34;今天&#34;在您的输出字符串中,以及时间格式化方法中的'%l:%M %p',我假设您正在尝试比较没有日期信息的时间对象

然而在Ruby中,Time对象总是带有日期。但是你可以通过在比较之前将它们转换到同一天来实现这一点。

a = Time.current
=> Mon, 08 Sep 2014 02:30:44 UTC +00:00
b = Time.current.months_ago(1)
=> Fri, 08 Aug 2014 02:30:59 UTC +00:00
a > b
=> true
a2 = a.change(day:1, month:1, year:2000)
=> Sat, 01 Jan 2000 02:30:44 UTC +00:00
b2 = b.change(day:1, month:1, year:2000)
=> Sat, 01 Jan 2000 02:30:59 UTC +00:00
a2 > b2
=> false

希望它有所帮助。