【问题标题】:Rails DateTime Conversion and Time ComparisonRails DateTime 转换和时间比较
【发布时间】:2012-09-28 22:29:21
【问题描述】:

我在比较 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 使用的方法是否与我想的不同?你甚至可以用这种方式比较时间吗?

【问题讨论】:

    标签: ruby-on-rails ruby datetime time


    【解决方案1】:

    如果您想查看间隔是否重叠,这个简单的检查就可以了:

    overlaps = interval_1_start < interval_2_end && interval_1_end > interval_2_start
    

    我不明白问题的其余部分,但我只是希望您在上面粘贴的代码周围没有两个大循环 eventapplication

    【讨论】:

      【解决方案2】:

      感谢您的建议姆拉登。

      为了使这项工作正常进行,我将所有时间对象传递到我制作的将它们转换为分钟的方法中。

      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
      

      我确信有更好的检查方法,但它现在确实有效。

      【讨论】:

        猜你喜欢
        • 2014-05-02
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多