2011-10-10 35 views
2

我想要求一個包含時區字段的特定時間。這可能嗎?輸入時間+時區與Rails

目前我使用這個檢索時間:

<%= f.time_select :meeting_time %> 
<%= f.time_zone_select :timezone %> 

,這要儘量改變時區:

meeting_time.in_time_zone(params[:meeting][:timezone]) 

但是當用戶輸入的時候它會自動設置爲rails服務器上的時區(在本例中爲GMT)。然後,如果用戶選擇例如GMT-1,則它將減少一小時的時間,但是我想要增加它,因此所有時間都以GMT顯示。

實施例:

用戶輸入18:00 GMT-1和f.time_select就會把它作爲18:00 UTC。接下來,我嘗試將它轉換爲格林威治標準時間1,但由於它已經在UTC,它將給我格林威治標準時間17:00而不是格林威治標準時間19:00,我想要的。

注:我不想一定要顯示GMT所有的時間,但我不認爲我可以在其他格式保存在不改變服務器時區

+0

我知道這是舊的,但時間庫並沒有在過去的5年內變化不大我可以告訴。這在這個線程中討論得更多。 http://stackoverflow.com/questions/35482356/rails-time-zone-conversion –

回答

3

我不知道這是否是正確的軌道約定,但這是一種解決方法,似乎對我來說工作得很好。

如果在將本地時間更改爲utc並將其保存到數據庫之前將其保存爲正確的utc時間,而不考慮服務器時區。

設置Time.zone當前請求

Time.zone = params[:meeting][:timezone] 

調整爲UTC

meeting_time = Time.zone.local_to_utc meeting_time