2017-05-02 18 views
1

私は全国(おそらくワールドワイド)の顧客を持つ予定のアプリを持っています。私はこのアプリで初めてタイムゾーンを扱っていますが、それは少し頭痛です。私は、異なるタイムゾーンでユーザーを扱うための戦略に興味があります。Rails 5:複数のタイムゾーンを持つレコードを保存するユーザーを処理するための戦略

今、ユーザーは、彼らが自分のアカウントを作成するときに自分のタイムゾーンを選択することができるとTime.zoneは、アプリケーションのコントローラで幅広いアプリケーションに設定されている:私は彼らのイベントを作成できるようにユーザーをしたいと思い

# application_controller.rb 
def set_timezone 
    if current_user 
    Time.zone = current_user.time_zone 
    else 
    Time.zone = "Pacific Time (US & Canada)" 
    end 
end 

自分のタイムゾーンで時刻を自動的に設定し、他のタイムゾーンの他のユーザーに調整して適切な時刻を見せるようにします。

私はこの問題(一見よく見られる問題)に対処するためにGoogleに挑戦し、これに対処する戦略として不思議に思っています。私はRailsがいくつかの機能を持っていると思います。

答えて

0

私は2つの側面で問題を分割することをお勧めします:あなたは、単一のタイムゾーンを使用してDBに時間を使ってイベントや他のモデルを保存する必要があります(私はUTCを推奨):中

  1. データつまり、モデルを作成するたびに、優先するタイムゾーンをdbタイムゾーンに変換する必要があります。 アプリとdbが同じタイムゾーンに設定されていることを確認してください。

  2. データアウト:あなたはそれがモデルにだあなたのアプリ間で共有メソッドを作成する必要があります、発表者などが使用することができ、好ましい時間帯にDBのタイムゾーンからデータを切り替えることができます。 これは、サーバーから出るデータの前の最後のステップです。あなたのアプリは、単一のタイムゾーンで計算し、すべてを行い、ユーザーが自分の好みの場所でそれらを持っています

    time.in_time_zone("America/New_York") 
    

    このように:

方法は、このようなものを持っています。

+0

ちょっと、私はあなたの方法をショットしようとしていますが、私は少し問題に遭遇しているようです。間違って出力されます。 [12] pry(#)> to_datetime = "%m /%d /%Y%H:%M%p") => Wed、31 May 2017 12:00:00 +0000 [13 ]#pause(#)> to_datetime.in_time_zone( "太平洋時間(米国とカナダ)") => Wed、31 May 2017 05:00:00 PDT -07:00 [14] pry(#)> 私はgoogleでチェックします。すべてがうまくチェックアウトされているようです:http://imgur.com/W81qFwV – Antonio

+0

'started_at'の値を教えてもらえますか?タイプミスかもしれないと私には思われます。 – zetacu

+0

それはタイプミスでした。 ':ended_at'と':started_at'をコピーしましたが、まだエラーがあります。私は問題を自分自身の質問に入れます。http://stackoverflow.com/questions/43766762/rails-5-not-converting-datetime-object-timezone-correctly小さなコメントに問題を絞り込もうとするより簡単です。 – Antonio

関連する問題