2012-11-25 103 views
3

我有一列名爲test_date,類型datetime在一般考試表中。我建立了一個表單來創建和更新表單上的GeneralExam,我允許用戶通過jQuery UI Datepicker選擇一個日期和時間。如何在列表中顯示當地時間列類型日期時間保存在數據庫中的UTC

用戶選擇日期和時間後,它會顯示在文本字段,如:

25-11-2012 16:30

這是我當前的時間。當我在控制檯中運行,我看到test_date保存在數據庫:

2012-11-25 09:30:00

當我得到對象GeneralExam,並獲得test_date價值,它是:

g = GeneralExam.last 
g.test_date 
=> Sun, 25 Nov 2012 16:30:00 ICT +07:00 

我覺得test_date因爲我設置在application.rb是:

config.time_zone = 'Hanoi' 

但是wh恩我更新形式的一般考試,但它仍然顯示的時間保存在數據庫中,而不是我的本地時區,這意味着它顯示:

2012-11-25 09:30:00

但我想這就像我選擇的形式:

25-11-2012 16:30:00

我如何設置爲本地時間顯示日期時間列?

我認爲日期的順序是相反的,當我選擇日期時,它是25-11-2012,但是當它顯示它是2012-11-25時,爲什麼它顛倒了順序?

回答

4

幾個小時,我對谷歌和計算器搜索後,我想我找到了我想。我查看了this question並找到了有關strftime方法的一些信息。這是我需要解決我的問題的信息。

首先,如何顯示日期時間保存在UTC本地時間顯示它:

Value was saved:        2012-11-25 09:30:00 

Value I want display on form (ICT +7:00): 25-11-2012 16:30:00 

要顯示的值我想要的,我用這對錶(我用simple_form):

<%= f.input :test_date, as: :string, label: false, input_html: { id: "datetime_picker", value: f.object.test_date.strftime("%d-%m-%Y, %H:%M") } %> 

我在數據庫中有值,並通過格式化:

value: f.object.test_date.strftime("%d-%m-%Y, %H:%M") } %> 

而當我想顯示test_date在表格數據中,我也用strftime("%d-%m-%Y, %H:%M")來顯示我想要的日期時間格式。

+0

'value:f.object.test_date.localtime' is short – Mirko

0

正確的設置與您的Rails配置有關,也與您的數據庫配置有關。有一個Railscast,解釋如何避免大部分陷阱。爲了保持一致性,所有日期和時間都以UTC保存在數據庫中。轉換是由Rails配置完成的,具體取決於你的config.time_zone。在這種情況下,你應該嘗試:

Time.zone.now 

這需要在帳戶的配置,在Rails和不同於:

Time.now 
+0

我不想獲取當前時間,但我想顯示在本地數據庫中保存的時間。回過頭後,我找到解決方案,我會將其作爲回答發佈:) – Thanh

相關問題