2014-07-22 84 views
0

我使用UTC存儲日期時間字段,但用戶可以在各個時區中輸入日期時間字段。我通過JavaScript設置cookie來配置時區。這是我的ApplicationController代碼:Rails 4部分格式化日期時間字段

before_filter :set_timezone 

def set_timezone 
    if !cookies["time_zone"].to_s.blank? 
    Time.zone = cookies["time_zone"].to_s 
    end 
end 

我在另一個控制器的窗體上使用嵌套屬性存儲時間。下面是使經由simple_form和simple_fields_for字段,其形式爲通過「F」部分:

<div class="row fieldset"> 
    <div class="col-sm-3"> 
    <%= f.input :day, collection: days, selected: f.object.day %> 
    </div> 
    <div class="col-sm-3"> 
    <%= f.input :open, as: :string %> 
    </div> 
    <div class="col-sm-3"> 
    <%= f.input :close, as: :string %> 
    </div> 
    <div class="col-sm-3"> 
    <%= f.input :_destroy, as: :hidden %> 
    <%= link_to "remove", '#', class: "remove_fields" %> 
    </div> 
</div> 

的時間區轉換是否正常工作。我可以在JavaScript檢測到的時區中輸入時間,然後將它們存儲在UTC中。它也顯示他們在檢測時區,但打印出完整的格式:

2014-07-22 05:00:00 -0700 

我相信這些字段是由他們到視圖的時間字符串,這就是爲什麼設置輸入字段的值以下不起作用:

<%= f.input :close, as: :string, input_html: { value: f.object.close.to_s(:short) } %> 

我只是測試'短'格式選項。想象我可以稍後添加一個自定義的。

我是否需要使用嵌套屬性格式化控制器中控制器的時間?或者我可以在處理存儲時間的模型中對它們進行格式化?讓我知道你是否需要更多信息或代碼。

回答

1

我不知道如果這是最好的選擇,但這裏是兩個我發現:

1)傳遞一個實例變量,局部與字段值。實例變量允許我使用to_s(:custom_format)格式化日期時間字段。

2)我使用簡單的窗體,發現使用他們的時間格式效果很好。例如:

<%= f.input :close, as: :time, ampm: true, minute_step: 15 %>

您可以通過任何default datetime_select參數,形式簡單。

第二個選項將子午線選項(AM/PM)添加到小時字段,這對我來說有點奇怪。但它似乎是兩者中最簡單的解決方案,所以我現在就這樣做了。

enter image description here