回答
顯然,這是一個老問題,已經打上了正確的答案,但是,我想發佈可幫助人們通過搜索找到相同問題的答案。
標記爲正確的答案的問題是,您的當前時間可能已經過了午夜,並且在此時,建議的解決方案將失敗。
這是一個考慮到這種情況的替代方案。
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. SQL Server:按昨天早上9點到今天晚上9點分組
- 3. 上午9點至上午10點之間的每天的Cron表達式
- 4. PHP檢查當前時間是否在指定時間之前
- 5. 使用GETDATE()並添加時間參數(如上午9點到上午8點59分之間)
- 6. 確定當前時間是否在當天下午5點之前
- 7. 如何確保服務在上午9點開始,每天晚上9點停止?
- 8. 情節從晚上11點到早上9點的時間數據,可以追溯到
- 9. 格林尼治標準時間上午9點設置鬧鐘
- 10. 如何在android上每天每小時給予背景通知(例如上午7點到上午8點,上午9點,上午9點00分)
- 11. 如何從mysql中檢索結果,其中時間戳是在昨天晚上11點到今天晚上11點之間?
- 12. 檢查當前時間是午夜/還是Joda時間的第二天?
- 13. 當前時間戳=明天
- 14. 在MongoDB上午9點到晚上7點獲取元素「創建」
- 15. 檢查時間間隔之間的當前時間android
- 16. 詹金斯/哈德森建立日程安排時間跨越午夜(晚上9點至凌晨2點)
- 17. MySQL Timediff計數時間從晚上10點到早上6點
- 18. ScheduledExecutorService每天晚上12點執行UTC時間
- 19. 如何檢查當前時間是否在特定工作時間之間?
- 20. PHP檢查當前時間是否在兩次之間
- 21. 檢查一天中的當前時間是否在特定時間之前或之後
- 22. 檢查當前時間是否在2次之間。 JAVA
- 23. 如何在上午10點到晚上10點之間每隔2小時執行一次crontab?
- 24. 如何檢查當前時間是否在oracle的兩個時間戳之間
- 25. 檢查當前時間是否在其他時間
- 26. 如何檢查當前時間是否在一段時間內?
- 27. Swift - 檢查一個時間戳是昨天,今天,明天還是X天前
- 28. 檢查時間是否在下午2點或之前的代碼PHP
- 29. 時間表從上午12點到上午12點
- 30. 如何檢查是否當前EST時間是00.00.00之間 - 檢查00.00.10
爲什麼明確的'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中引入的。 –