2013-07-24 16 views
0

的PARAMS字符串,指示時間範圍沒有存儲在我的數據庫的Rails 3.1測試是否有時間對象是字符串時間範圍

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 

怎麼辦我測試一個客戶時間範圍是否在預定的時間範圍內,返回真或假?

到目前爲止,我有這個,但我總是得到真正的和不贊成警告加上它真的很慢。

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 

這些在獲得迄今是有幫助的:

回答

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對象,用client1.sched_start.class檢查)。

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

time_openscheduled_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 
  • 編輯 - 如何檢查時間在一個範圍內*

我認爲這是更清晰檢查時間是一個範圍內使用<>運營商:

>> start_time = Time.new(2013, 7, 29, 10) 
=> 2013-07-29 10:00:00 -0400 
>> end_time = Time.new(2013, 7, 29, 16) 
=> 2013-07-29 16:00:00 -0400 
>> subject_time = Time.new(2013, 7, 29, 14) 
=> 2013-07-29 14:00:00 -0400 
>> subject_time > start_time && subject_time < end_time 
=> true 
+0

感謝您的答覆。這就解釋了爲什麼時代會以不同的時間格式顯示。當我做了'time_open.class'時,我得到了'ActiveSupport :: TimeWithZone'。因此,我將打開/關閉時間更改爲'time_open = Time.parse(「2000-01-01 08:00 AM」+「UTC」)'現在它們都是'Time'類。但是,當我追蹤並製作時間範圍,然後查看我的時間對象是否在該範圍內時。我收到一個錯誤。 'TypeError:無法從時間迭代' – JHo

+0

@JHo - 我更新了我的答案,以顯示我應該如何檢查時間是否在一定範圍內。請讓我知道這是否適合你! – Powers

+0

我喜歡這個解決方案。它適用於任意日期並可以輕鬆轉換字符串。此引用也很有用:http://stackoverflow.com/questions/1609267/how-to-find-if-range-is-contained-in-an-array-of-ranges – JHo

相關問題