我爲時限的模型所規定的時間框架內:檢查事件是否爲
STARTTIME: HH:MM
ENDTIME: HH:MM
現在我需要做一個查詢與格式HH給定的時間ACTUALTIME
:MM,檢查是否ACTUALTIME
在我定義的任何時間範圍內:STARTTIME
和ENDTIME
。
因爲當只能由小時和分鐘定義了Ruby對象時總是由一個日期表示,我不知道羯羊有任何的可能性來查詢是這樣的:11:00至15:00 13:40 無考慮日期部分。
我爲時限的模型所規定的時間框架內:檢查事件是否爲
STARTTIME: HH:MM
ENDTIME: HH:MM
現在我需要做一個查詢與格式HH給定的時間ACTUALTIME
:MM,檢查是否ACTUALTIME
在我定義的任何時間範圍內:STARTTIME
和ENDTIME
。
因爲當只能由小時和分鐘定義了Ruby對象時總是由一個日期表示,我不知道羯羊有任何的可能性來查詢是這樣的:11:00至15:00 13:40 無考慮日期部分。
謝謝Phrogz的意見,我想出如何寫一個可以比較總重量的方法獨立於他們的日期o次。它工作正常,我即使ENDTIME
是24:00後
def betweenTime(timestart, timeend, timecheck)
getseconds = lambda{ |time| time.hour*60*60 + time.min*60 + time.sec}
timestart = getseconds[timestart]
timeend = getseconds[timeend]
timecheck = getseconds[timecheck]
if (timeend-timestart) < 0
timeend = timeend + (60*60*24) # add seconds for one day if timeend is after 24:00
end
timecheck.between?(timestart, timeend)
end
如果您HH:MM
是字符串,它們總是零填充(如「03:08」),那麼你可以只使用一個簡單的字符串比較:
irb:02> first = "03:17"; last = "11:54"
#=> "11:54"
irb:03> range = first..last
#=> "03:17".."11:54"
irb:04> range.include? "00:00"
#=> false
irb:05> range.include? "03:50"
#=> true
irb:06> range.include? "03:09"
#=> false
irb:07> range.include? "12:17"
#=> false
irb:08> range.include? "11:17"
#=> true
如果startTime和endTime都要進入紅寶石作爲Time
情況下,那麼你可以寫一個方法將它們轉換爲字符串(my_time.strftime('%H:%M')
),或者你可以簡單地寫一個比較:
# Returns true if hour:min is between the times in t1 and t2
def between(hour,min,t1,t2)
t1.hour<=hour && hour<=t2.hour && t1.min<=min && min<=t2.min
end
感謝Phrogz, 兩種解決方案似乎工作完美,只要ENDTIME 24:00等之後是不是:STARTTIME 19:00; ENDTIME 03:00。 但是隨着你的代碼,我想出瞭如何編寫一個方法來完成這項工作。附在這裏 – JOxBERGER 2012-04-07 21:52:05
請注意,在Ruby中定義一個類似於另一個方法的方法並不像JavaScript中那樣:每次調用betweenTime時,都會在同一個作用域(非專用)中重新定義一個新的'getseconds'方法。你可能需要'getseconds = lambda {| time | ...}; timestart = getseconds [timestart]'。 – Phrogz 2012-04-07 22:33:36
好的提示...只是補充說。 tnhx諮詢! – JOxBERGER 2012-04-08 09:02:02
請注意,這並不在 'timestart的情況下工作:21:30' 'timeend:04:30' 'timecheck:02:00' 由於事實,你不改變'timecheck'如果'timeend'在24:00之後,那麼在這種情況下,它的數值小於'timestart'且小於'timeend',從而產生'false'返回值... – 2014-01-13 11:52:28