私はこれらの日時を持っています:
schedule.day_start # => 2014-09-27 15:30:00 UTC
date_now = Time.now # => 2014-09-27 15:11:14 +0200
date_now + 60.minutes # => 2014-09-27 16:11:14 +0200
day_start
の60分以内に開始するすべてのスケジュールを検出しようとしています。次のコードでは、応答として"NO"
ではなく"YES"
を受け取ります。
if schedule.day_start < (Time.now + 60.minutes)
"YES"
else
"NO"
end
2014-09-27 15:30:00 UTC
が2014-09-27 16:11:14 +0200
よりも大きいのはなぜですか?
日付をUTCとして処理するため、タイムゾーンの問題を回避できます
if schedule.day_start.utc < (Time.now + 60.minutes).utc
...
どこでも、時間Aが時間Bの後に来る場合、AはBより大きいと見なされます。あなたの場合も同じです。
schedule.day_start#=> 2014-09-27 15:30:00 UTC
date_now + 60.minutes#=> 2014-09-27 16:11:14 + 0200これは2014-09-2714:11:14UTCです。
ここで、Time.now + 60.minutesがschedule.day_startの前のtimestampであることがはっきりとわかります。したがって、schedule.day_startはTime.now + 60.minutesよりも大きいため、"if"の場合は当てはまらず、したがって[〜#〜] no [〜# 〜]が出力されます。
結果はfalseであることに注意してください。これは、GMTがこれを解決し、UTCを使用してGMTなしの唯一の日時を比較するには、次のことを試してください。
minutes = 60.minutes
t1 = Time.at(schedule.day_start.utc).to_datetime
t2 = Time.at((Time.now + minutes).utc).to_datetime
if t1 < t2
"YES"
else
"NO"
end
なぜなら
2014-09-27 16:11:14 +0200
と同時に
2014-09-27 14:11:14 UTC
前に来る
2014-09-27 15:30:00 UTC
Time
オブジェクトの場合、「follows」は「greater」に変換されます。