2012-05-07 20 views
1

Railsは、created_atおよびupdated_atタイムスタンプをUTC時刻で格納します。Ruby-on-railsのcreated_atおよびupdated_atの日付の設定time_zone

しかし、これらのフィールドを使用して、これらのフィールドに基づいてフィルタリングしたり保存したりすることができます。したがって、created_at属性とupdated_at属性を呼び出すと、タイムゾーンでタイムスタンプが取得されることが重要です。

次の2つの質問からわかるように、私はenvironment.rbファイルにタイムゾーンを設定することでこれを行うことができます。

しかし、それは今私のために働いています。

created_atフィールド(これはUTC)に基づいてデータベースからレコードを取得しているので、間違ったものが出てきて表示されているので、日付はUTCで表示されます。私が望むもの

レールに日付を保存する時間帯を変更する方法はありますか?

OR

私はRailsのへの呼び出しobject.created_at属性を加えることなく、データベースフェッチおよび表示を実現する方法のための回避策はありますか?

Rails and timezone in created_at

Rails Time zone issue

+0

を行うことができます。これを行うための「正しい方法」は、レコードをUTCに格納し、必要な場合には 'Time.zone'を設定します。 – x1a4

答えて

0

回避策はかなり単純なものに見えたので、私も、このフォーラムに質問を私はなぜだろうか。しかし、それは、それに到達するために私に8時間かかる:)

1)データベースからレコードをフェッチして表示している間、私は単に

select CONVERT_TZ(date) as date from table; 

代わりの

select date from table; 

CONVERT_TZ()をやってを行うことができましたmysqlという特定の関数なので、私のために働いた。しかし、普遍的な解決策ではありません。

2)第2に、他のタイムゾーンで指定された日付範囲からレコードを取得する必要があるとき、私はその2つのうちの1つを実行できます。

1 - 私は範囲の終点のため[user-entered-date + 1.day] 07:00:00と日付範囲の出発点のため[user-entered-date] 07:00:00[user-entered-date] 59:59:59[user-entered-date] 00:00:00を置き換えることができます。 Dateオブジェクトを使用する代わりにDateTimeオブジェクトを使用する必要があることに注意してください。

二 - where節では、私は理解していない

CONVERT_TZ(registrations.created_at) <= [user/entered/date] 

代わりの

(registrations.created_at) <= [user/entered/date] 
関連する問題