2

私はそのようなコードを試しましたが、うまくいきません:

require 'time_diff'

cur_time = Time.now.strftime('%Y-%m-%d %H:%M')
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time))
if  @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && time_diff_components[:hour] < 3 &&

しかし、timediff は 0 です。db 時間では次のようになります。

2012-08-28 19:53:12

現在とdbの間の時間の差をどのように計算しますか?

4

2 に答える 2

4

まず、次の 2 行を見てください。

cur_time = Time.now.strftime('%Y-%m-%d %H:%M')
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time))

時間をフォーマットしてから、その値を解析操作への入力としてのみ使用するのはなぜですか? 確かに、次のように書く方が簡単で、壊れにくくなります。

time_diff_components = Time.diff(@art.datetime_of_update, Time.now)

なぜうまくいかないTime.diffのかわかりませんが (私は Ruby 開発者ではありません)、記事が「3 時間以内」に更新されたかどうかを確認することが目的であれば、もっと簡単な方法があります: 3 時間を減算します。現在の時間から、記事の更新時間をその制限と比較します。

limit_time = Time.now + 3.hours
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && @art.datetime_of_update >= limit_time
于 2012-09-09T11:41:55.847 に答える
3

厳密にする必要がない場合は、Rails のtime_ago_in_wordsヘルパーを使用できます。

time_ago_in_words(Time.now - 3.hours)
#=> about 3 hours

もちろん、時差によっては、「分」、「日」なども返されます。

于 2012-09-09T15:17:19.140 に答える