0

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に対して、私が考えているものとは異なるアプローチを使用していますか?この方法で時間を比較することもできますか?

4

2 に答える 2

1

間隔が重複しているかどうかを確認しようとしている場合は、次の簡単なチェックで実行できます。

overlaps = interval_1_start < interval_2_end && interval_1_end > interval_2_start

質問の残りの部分はわかりませんが、上に貼り付けたコードeventとその周りに 2 つの大きなループがないことを願っています。application

于 2012-09-29T05:37:09.170 に答える
0

ご提案ありがとうございます。

これを機能させるために、すべての時間オブジェクトを作成したメソッドに渡し、それらを分に変換しました。

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

確認するためのより良い方法があると確信していますが、現在は機能しています。

于 2012-09-30T16:51:40.907 に答える