3

という列があり、General Exam テーブルtest_dateに入力します。datetimeGeneralExam を作成および更新するためのフォームを作成しました。フォーム上で、ユーザーが日付と時刻を選択できるようにしましたjQuery UI Datepicker

ユーザーが日付と時刻を選択すると、次のようにテキストフィールドに表示されます。

25-11-2012 16:30

それは私の現在の時間です。コンソールで実行するとtest_date、データベースに保存されていることがわかります。

2012-11-25 09:30:00

オブジェクト GeneralExam を取得してtest_date値を取得すると、次のようになります。

g = GeneralExam.last
g.test_date
=> Sun, 25 Nov 2012 16:30:00 ICT +07:00

test_dateで設定したので、変換されたと思いますapplication.rb

config.time_zone = 'Hanoi'

しかし、フォームで一般試験を更新すると、ローカルタイムゾーンではなく、データベースに保存された時間が表示されます。つまり、次のように表示されます。

2012-11-25 09:30:00

しかし、フォームで選択したようなものにしたい:

25-11-2012 16:30:00

日時列を現地時間で表示するように設定するにはどうすればよいですか?

25-11-2012そして、日付の順番が逆だったと思います2012-11-25

4

2 に答える 2

5

数時間後、グーグルとスタックオーバーフローで検索したところ、欲しいものが見つかったと思います。私はこの質問を見て、方法に関するいくつかの情報を見つけstrftimeました。これが私の問題を解決するために必要な情報です。

まず、日時を表示する方法は、表示時に現地時間としてUTCで保存されました。

Value was saved:                             2012-11-25 09:30:00

Value I want display on form (ICT +7:00):    25-11-2012 16:30:00

必要な値を表示するために、フォームでこれを使用しました(simple_formを使用しました)。

<%= f.input :test_date, as: :string, label: false, input_html: { id: "datetime_picker", value: f.object.test_date.strftime("%d-%m-%Y, %H:%M") } %> 

私はデータベースに価値を持っており、それを次のようにフォーマットしています。

value: f.object.test_date.strftime("%d-%m-%Y, %H:%M") } %> 

test_dateまた、テーブルデータで表示したいときは、strftime("%d-%m-%Y, %H:%M")日時形式も好きなように表示していました。

于 2012-11-25T11:46:59.533 に答える
0

適切な設定は、Rails config だけでなく、DB config にも関連しています。ほとんどの落とし穴を回避する方法を説明するRailscastがあります。一貫性を保つために、すべての日付と時刻は UTC でデータベースに保存されます。config.time_zone に応じて、変換は Rails config によって行われます。この場合、次のことを試してください。

Time.zone.now

これは Rails の構成を考慮しており、次のものとは異なります。

Time.now 
于 2012-11-25T10:12:31.447 に答える