Rails 3.1测试时间对象是否在字符串时间范围内

时间:2013-07-24 23:00:51

标签: ruby-on-rails-3 datetime

指示时间范围的params字符串

sched = "8:00AM-5:30PM"

我的数据库中存储了开始和结束时间

client1.sched_start    # => 2000-01-01 07:30:00 UTC
client1.sched_end      # => 2000-01-01 17:30:00 UTC
client2.sched_start    # => 2000-01-01 08:30:00 UTC
client2.sched_end      # => 2000-01-01 16:30:00 UTC

如何测试客户端时间范围是否在计划的小时范围内,返回true还是false?

到目前为止,我有这个,但我总是这样,弃用警告加上它真的很慢。

time_open = Time.use_zone('UTC'){Time.zone.parse '2000-01-01 '+sched.split("-")[0]}
time_close = Time.use_zone('UTC'){Time.zone.parse '2000-01-01 '+sched.split("-")[1]}
range = time_open..time_close
range === client1.sched_start && range === client1.sched_end
range === client2.sched_start && range === client2.sched_end

这是警告

的摘录
warning: Time#succ is obsolete; use time + 1

此外,时间是不同的格式。例如,

time_open # Sat, 01 Jan 2000 08:00:00 UTC 00:00

这些对于到目前为止有所帮助:

1 个答案:

答案 0 :(得分:0)

让我们简化您的问题,看看我们是否可以让您走上正确的道路。 time_open评估为以下值:

>> time_open = Time.use_zone('UTC'){Time.zone.parse '2000-01-01 ' + "8:00AM"}
=> Sat, 01 Jan 2000 08:00:00 UTC +00:00

让我们将client1.sched_start(我将其称为scheduled_time)转换为Time对象(如果client1.sched_start已经是Time对象,则可能不需要此步骤,请使用{{1}进行检查}})。

client1.sched_start.class

>> scheduled_time = Time.parse('2000-01-01 07:30:00 UTC') => 2000-01-01 07:30:00 UTC time_open不相等:

scheduled_time

如果我们将>> time_open == scheduled_time => false 与同一时间进行比较,它将是相等的:

time_open
  • 编辑 - 如何检查时间是否在范围内*

我认为使用>> correct_start = Time.parse('2000-01-01 08:00:00 UTC') => 2000-01-01 08:00:00 UTC >> time_open == correct_start => true <运算符来检查时间是否在一个范围内会更清楚:

>