0

我有一个由以下定义的时间框架模型:

STARTTIME: HH:MM
ENDTIME: HH:MM

现在我需要以ACTUALTIMEHH:MM 格式对给定时间进行查询,并检查是否ACTUALTIME在我定义的任何给定时间范围内:STARTTIMEENDTIME

由于仅由 Hour 和 Minute 定义的 Ruby 时间对象始终由日期表示,我想知道是否有可能查询如下内容:Is 13:40 between 11:00 and 15:00 without take the date part into帐户。

4

2 回答 2

1

如果您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 作为实例进入 Ruby,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
于 2012-04-05T16:31:52.013 回答
0

感谢 Phrogz 的建议我想出了如何编写一个可以独立于日期比较两次的方法。即使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
于 2012-04-07T21:59:06.930 回答