2012-05-07 11 views
2

私は、ユーザーが彼らが知っているインタビューの詳細を投稿できるRailsアプリケーションを構築しています。このフォームには、日付の時間セレクタである入力フィールドのインタビュー時間があります。私のRailsアプリケーションに世界共通のサポートを与える方法は?

実際の問題:

私たちは日本のユーザーはIST時間zone.The結果に解析されるインタビューの時間を選択した場合、私は私の生産server.ThenにおけるISTのタイムゾーンを設定していると言うようになりますインタビュー時間が間違っている。

正しいインタビュー時間を表示します。

私は、ユーザーからのタイムゾーンを取得する必要がありますか?(おそらく選択ボックス)

1.Doは、自動的にタイムゾーンを検出するために、他のオプションがあります2.Is?

はあなたの人々をありがとう:)

何かが不明である場合は、質問以下のコメントを追加してください。

答えて

3

私も同様の問題があります。私はすべての時間はDBにUTCに保存されている、と私はActiveSupport::TimeZoneから次のメソッドを使用しているデフォルトのレールの設定を保持:

  • 私は、フォームからの日付を保存する必要があるとき、私は変換するのにlocal_to_utcを使用しました地元からUTCへ日時:

    ActiveSupport::TimeZone[my_timezone].local_to_utc(date) 
    
  • 私はDBからの日付を表示する必要があり、私は

    ActiveSupport::TimeZone[my_timezone].utc_to_local(date) 
    
012を使用

このようにして、DBに保存されたすべての日付はUTCになりますが、現地時間でユーザーによって処理されますが、ユーザーごとに異なる可能性があります。タイムゾーンをUserレベル(DB内にstringフィールド)に格納したり、select helperを使用して選択フィールドを生成することができます。

+0

ありがとう友人:) –

1

Baldrickの答えは正しい - あなたはUTCで時刻を保存し、各ユーザーのタイムゾーンをユーザーのレコードに保存する必要があります。

さらに、ユーザーがよく見たいのは、ローカル時間がその場所にあったことです。

これを行うには、UTC時刻を保存するときに、イベントを作成したユーザーのタイムゾーンも保存します。

このすべての難しい部分は、MySQLや他の多くのデータベースでは、日付/時刻とともにタイムゾーンを保存しないということです。したがって、別のフィールドに明示的に格納しない限り、タイムゾーン情報は失われます。

したがって、あなたのデータベースに2つのフィールドが必要です。

event_time_utc: Datetime, # UTC timezone for when the event happened 
event_timezone: string # the timezone of where the event happened 
+0

はあなたの友人をありがとう:) –

関連する問題