我在比较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 :(得分:1)
如果您要查看间隔是否重叠,可以执行以下简单检查:
overlaps = interval_1_start < interval_2_end && interval_1_end > interval_2_start
我不明白问题的其余部分,但我希望您在上面粘贴的代码周围没有event
和application
两个大循环。
答案 1 :(得分: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
我确信有更好的方法可以检查,但现在确实有效。