この問題に関する多くの投稿を読みましたが、十分に明確に取り組んでいるようには見えません。
基本的にReceipt
、日時フィールドを持つモデルがありますdoc_date
日付を保存するときは、ローカル エリア (リスボン、現在は DST : GMT +1) に保存します。DBにはUtc(gmt)の日付があります。つまり、私が現在いる時間よりも 1 時間少ないということです。
ここまでは順調ですね。
問題は、フィールドをフォームにロードするときです。
<%= form_for(@receipt) do |f| %>
[...]
<div class="field">
Date Test </br>
<%= @receipt.doc_date %>
</div>
<div class="field">
<%= f.label :doc_date %>
<%= f.text_field :doc_date %>
</div>
[...]
<% end %>
保存した日付が「2013 年 8 月 1 日 0 時」だったとすると、ドキュメント日付入力欄の表示日付は「2013 年 7 月 31 日 23 時」となります。
反対側の日付テストはそれが正しいことを示しています
Date Test
2013/08/01 00:00
私のapplication_controllerにもあります
before_filter :set_user_time_zone
#Sets the user default time zone to the one configured in the db
def set_user_time_zone
Time.zone = current_user.time_zone if user_signed_in?
end
私のapplication.rbにはconfig.time_zone = 'Lisbon'
Rails 3.2 を実行しています。
コンソールで Receipt.where(id:18365).first.doc_date を実行すると、日付も 8 月 1 日 00:00 を返すため、問題はフォームの読み込みにあるようです...
したがって、これはRailsがフォームフィールドのタイムゾーン変換をスキップしていること、またはそのフィールドにjquery datepickerカレンダーがあるという事実に関連しているようです...
フォーム フィールドに正しい現地日時を表示するための提案はありますか?