2

Heroku で日付メソッドが正しく機能しません。を使用するユーザーを作成し、その属性に(GMT-05:00) Eastern Time (US & Canada)基づいて追加された製品が表示されると想定しています。dateと言うAdded 1 Product Today事なのですが、方法自体は前日までに記録している様です。today昨日もそうですし、一昨日もyesterdayそうです。

ここに私の方法があります:

  def self.today
    where(:date => Date.today)
  end

  def self.yesterday
    where(:date => Date.yesterday)
  end

  def self.this_week
    where(:date => Date.today.beginning_of_week..Date.today.end_of_week)
  end

  def self.last_week
    where(:date => 1.week.ago.beginning_of_week..1.week.ago.end_of_week)
  end

  def self.this_month
    where(:date => Date.today.beginning_of_month..Date.today.end_of_month)
  end

  def self.last_month
    where(:date => 1.month.ago.beginning_of_month..1.month.ago.end_of_month).order('date desc')
  end

-1 dayしたがって、開発中ではなく、Heroku のすべてのメソッドに常に適用されると思います。Heroku のタイム ゾーンと時間は次のとおりです。

Loading production environment (Rails 3.2.8)
irb(main):001:0> Time.now
Time.now
=> 2012-09-21 02:37:26 +0000
irb(main):002:0> Time.zone
Time.zone
=> (GMT+00:00) UTC

2012-09-20米国東部にあるため、これは私にとって間違っています。

メソッドをすべてのタイムゾーンで機能させたいのですが、Eastern Timezoneこれについてどうすればよいですか? タイムゾーンに基づいて、ユーザーが追加した製品を表示するにはどうすればよいですか?

ありがとうございました。

4

3 に答える 3

2

ええと、グローバルに 1 つのタイム ゾーンが必要な場合、それを行う最も簡単な方法は、heroku config:set TZ適切な値にすることです。それはlibcからすべてをカバーしています。

ただし、ユーザー固有のタイム ゾーンとは、各要求のコンテキスト内でタイム ゾーンを変更する必要があることを意味します。「各リクエスト」は、すぐに「コントローラー内」と思わせるはずです。

Rails (具体的には ActionSupport) はTime.zone=. また、これはよくあることなので、zone=ドキュメントにはこのシナリオ専用のサンプル コードが含まれています。

class ApplicationController < ActionController::Base
  around_filter :set_time_zone

  def set_time_zone
    old_time_zone = Time.zone
    Time.zone = current_user.time_zone if logged_in?
    yield
  ensure
    Time.zone = old_time_zone
  end
end

また、ユーザーにリストからタイム ゾーンを選択させることができない場合は、JavaScript で検出されたタイム ゾーン オフセットに基づいて推測できます。それは何もないよりはましです。

于 2012-09-21T04:07:03.517 に答える
1

時点検索関数の前に in_time_zone を付ける必要があります。たとえば、Date.today.beginning_of_weekする必要がありますDate.today.in_time_zone(users_tz).beginning_of_week

于 2012-09-21T05:03:59.510 に答える
0

この行をconfigフォルダーの下のapplication.rbに追加します

config.active_record.default_timezone ='GMT + 5.30'

于 2012-09-21T05:00:37.360 に答える