9

我正在爲一個音樂會巡迴網站提供應用程序,其中所有時間(通知時間,開售時間和活動開始時間)都是每個特定場地的時間區。在適用的情況下,我輸入用戶輸入的日期/時間並運行before_filter以設置適當的時區,以便所有內容都以UTC格式保存在數據庫中。對於'新'形式,並在索引和顯示動作中顯示時間,完全沒有問題。當數據被帶出數據庫並進入視圖時,我使用in_time_zone根據特定場地進行調整。Rails - 指定時區內的日期時間選擇

唯一的問題是在編輯窗體上。日期/時間選擇以UTC顯示數據。當我在網站上工作時,我會進行精神上的調整,但對於其他人來說,這是令人困惑的。我想沿着線做一些事情:

<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>

或者,在控制器:

def edit 
    @performance = Performance.find(params[:id]) 
    @event = @performance.event 
    @performance.start_datetime = @performance.start_datetime.in_time_zone(@event.time_zone) 
end 

然後簡單,<%= f.datetime_select :start_datetime %>

不幸的是,我還沒有找到正確的方法來做到這一點。你有什麼想法值得一試?

非常感謝。

回答

0

怎麼是這樣的:

# change PST to correct zone abbrev. 
new_zone = ActiveSupport::TimeZone.new("PST") 
@performance.start_datetime = @performance.start_datetime.in_time_zone(new_zone) 
1

我不知道如果我理解你想做的事,但因爲要存儲的@ event.time_zone,您可以添加

:default => start_time.in_time_zone(@event.time_zone) 

到您的datetime_select表單字段。

0

我剛剛注意到這是一箇舊帖子,但是: 如果我是你,我會使用虛擬屬性來表示場地的日期時間。例如,您可以將一個屬性添加到名爲adjusted_start_time的效果。

3

您可以使用datetime_select的默認方法,如下:

%br 
= f.label :req_sess_start, "Session starts at" 
= f.datetime_select(:req_sess_start, :start_year => 2010, :ampm => true, :default => 0.days.from_now.in_time_zone(@timezone)) 

由於顯示的默認值,客戶會認爲時間已經在他/她的本地時區進入,但是...... 這個值實際上是在您的應用程序的默認時區(如application.rb中提供的,默認值是UTC)。 因此,您需要一些服務器端編碼將其轉換爲正確的值。