回答
顯然,這是一個老問題,已經打上了正確的答案,但是,我想發佈可幫助人們通過搜索找到相同問題的答案。
標記爲正確的答案的問題是,您的當前時間可能已經過了午夜,並且在此時,建議的解決方案將失敗。
這是一個考慮到這種情況的替代方案。
now = Time.now
if (0..8).cover? now.hour
# Note: you could test for 9:00:00.000
# but we're testing for BEFORE 9am.
# ie. 8:59:59.999
a = now - 1.day
else
a = now
end
start = Time.new a.year, a.month, a.day, 21, 0, 0
b = a + 1.day
stop = Time.new b.year, b.month, b.day, 9, 0, 0
puts (start..stop).cover? now
再次使用include?
代替cover?
對Ruby 1.8.x的
當然,你應該升級到Ruby 2.0
創建具有定義所需的範圍內兩個時刻Range對象,然後使用#cover?
方法(如果您是在紅寶石的1.9.x):
now = Time.now
start = Time.gm(2011,1,1)
stop = Time.gm(2011,12,31)
p Range.new(start,stop).cover? now # => true
請注意,在這裏我使用了顯式方法構造函數來明確我們使用的是一個Range
實例。您可以安全地使用內核構造函數(start..stop)
。
如果你仍然對Ruby 1.8中,使用的方法Range#include?
,而不是Range#cover?
:
p (start..stop).include? now
require 'date'
today = Date.today
tomorrow = today + 1
nine_pm = Time.local(today.year, today.month, today.day, 21, 0, 0)
nine_am = Time.local(tomorrow.year, tomorrow.month, tomorrow.day, 9, 0, 0)
(nine_pm..nine_am).include? Time.now #=> false
這是如何標記爲正確的?如果當前時間_已過午夜,則「今日+ 1」將是第二天。如果當前時間在00:00到09:00之間,則需要額外進行檢查,然後相應地構建您的範圍。 – ocodo
我想它被標記爲正確的,因爲有些人能夠從提供的例子中推斷出他們需要的東西。 –
這可能讀在幾種情況下更好的邏輯是,如果簡單你有18.75
爲 「18:45」
def afterhours?(time = Time.now)
midnight = time.beginning_of_day
starts = midnight + start_hours.hours + start_minutes.minutes
ends = midnight + end_hours.hours + end_minutes.minutes
ends += 24.hours if ends < starts
(starts...ends).cover?(time)
end
我使用3點,因爲我不考慮在幾小時後的9點00分00分00秒。
那麼它是一個不同的主題,但它是值得強調的是cover?
來自Comparable
(如time < now
),而include?
來自Enumerable
(如數組包含),所以我更喜歡在可能時使用cover?
。
這是我如何檢查,如果事件是明天的Rails 3.x的
(event > Time.now.tomorrow.beginning_of_day) && (event < Time.now.tomorrow.end_of_day)
如果時間爲一天之間:
(start_hour..end_hour).INCLUDE? Time.zone.now.hour
- 1. 如何檢查時間是昨天上午9點到今天上午9點之間的Ruby?
- 2. 如何檢查DateTime的時間是晚上9點到17點(Ruby)?
- 3. 檢查時間是在今晚和明天早上之間
- 4. Javascript倒計時從上午8點到晚上9點
- 5. SQL Server:按昨天早上9點到今天晚上9點分組
- 6. 上午9點至上午10點之間的每天的Cron表達式
- 7. 碳,發現如果時間是在上午9點到下午5點
- 8. 倒計時重新啓動在凌晨3點,上午9點,下午3點和晚上9點
- 9. 如何找到時間上的差異,如上午9點和下午1點
- 10. PHP檢查當前時間是否在指定時間之前
- 11. 結果在兩個上午9點和10點之間 - mysql
- 12. 使用GETDATE()並添加時間參數(如上午9點到上午8點59分之間)
- 13. 確定當前時間是否在當天下午5點之前
- 14. 如何減少時間(從上午9點到下午5點)? Timepicker插件
- 15. 如何確保服務在上午9點開始,每天晚上9點停止?
- 16. 情節從晚上11點到早上9點的時間數據,可以追溯到
- 17. 格林尼治標準時間上午9點設置鬧鐘
- 18. 如何在android上每天每小時給予背景通知(例如上午7點到上午8點,上午9點,上午9點00分)
- 19. 如何從mysql中檢索結果,其中時間戳是在昨天晚上11點到今天晚上11點之間?
- 20. 檢查當前時間是午夜/還是Joda時間的第二天?
- 21. 當前時間戳=明天
- 22. JAVA:如何檢查當前時間是否在指定時間
- 23. 在MongoDB上午9點到晚上7點獲取元素「創建」
- 24. 檢查時間間隔之間的當前時間android
- 25. 如何從數據庫中檢索前幾天上午9點之後和今天上午9點之前插入的記錄。
- 26. 檢查當前時間是否在下午10:27之前
- 27. 檢查日期是否在當前時間的7天之內
- 28. 詹金斯/哈德森建立日程安排時間跨越午夜(晚上9點至凌晨2點)
- 29. MySQL Timediff計數時間從晚上10點到早上6點
- 30. 如果時間在晚上7點到7點之間,則使用Javascript嗎?
爲什麼明確的'Range.new'而不是'(start..stop).cover? now'? –
我得到一個錯誤未定義的方法'封面?'對於星期六01 01 00:00:00 UTC 2011..Sat Dec 31 00:00:00 UTC 2011:範圍 \t from(irb):11 \t from /opt/local/lib/ruby/1.8/date。rb:1770 –
@AmalKumarS:你可能在1.8,'cover?'是在1.9中引入的。 –