2012-09-28 46 views
0

我在Rails中比較時間有點麻煩。我想檢查一個事件是否在一個窗口內,如果有,事件或窗口從哪裏開始,哪個以第一個結束。我的代碼如下。Rails日期時間轉換和時間比較

startingTime = 0 
endingTime = 0 
time = 0 

eventTimeStart = Time.parse(event.start.to_s) #Need to convert DateTime to just Time 
windowTimeStart = Time.parse(application.reportStart.to_s) 

eventTimeEnd = Time.parse(event.end.to_s) #Need to convert DateTime to just Time 
windowTimeEnd = Time.parse(application.reportEnd.to_s) 

days = 0 

if((windowTimeStart > eventTimeStart) || !(eventTimeStart < windowTimeEnd)) 
    startingTime = windowTimeStart 
    if((eventTimeStart > windowTimeEnd)) 
    days -= 1 
    end 
else 
    startingTime = eventTimeStart 
end 

if((windowTimeEnd > eventTimeEnd) && (eventTimeEnd > windowTimeStart)) 
    endingTime = eventTimeEnd 
else 
    if((eventTimeEnd < windowTimeStart)) 
    days -= 1 
    end 
    endingTime = windowTimeEnd 
end 

我已經手寫了每種情況,但在運行時它似乎運行與預期不同。看起來好像我總是進入開放時代。 Rails對Times的使用方式不同於我的想法嗎?你甚至可以用這種方式比較時間嗎?

回答

0

感謝您的建議Mladen。

爲了得到這個工作,我把所有的時間對象都傳遞給了我所做的將它們轉換成分鐘的方法。

def self.getMin(time) 
    return((time.hour*60) + time.min) 
end 

我在所有的支票上都打過電話,現在看起來可以工作。

if((getMin(windowTimeStart) > getMin(eventTimeStart)) || !(getMin(eventTimeStart) < getMin(windowTimeEnd))) 
    startingTime = windowTimeStart 
    if((getMin(eventTimeStart) > getMin(windowTimeEnd))) 
    days -= 1 
    end 
else 
    startingTime = eventTimeStart 
end 

我敢肯定有一個更好的方法來檢查,但它現在工作。

1

如果你想看看是否間隔重疊與否,這個簡單的檢查就可以了:

overlaps = interval_1_start < interval_2_end && interval_1_end > interval_2_start 

我不明白這個問題的休息,但我只是希望你沒有圍繞您上面粘貼的代碼的eventapplication兩個大循環。