1

この問題に関する多くの投稿を読みましたが、十分に明確に取り組んでいるようには見えません。

基本的に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カレンダーがあるという事実に関連しているようです...

フォーム フィールドに正しい現地日時を表示するための提案はありますか?

4

1 に答える 1

2

コメントによると:

フィールドのタイムゾーンには素晴らしい答えがあります。Rails 'config.time_zone' は、text_field にロードされた日時データには適用されません。修理?


<%= f.text_field :doc_date, value: f.object.doc_date %>
于 2013-09-19T18:13:49.393 に答える