2015-09-28 58 views
0

我在我的表中有時間列。並在/config/application.rb上午有以下聲明。 config.time_zone = 'Mumbai'在Rails中,時間列未顯示保存時間的time_zone中的時間?

和IAM節省的時間在數據庫中,用下面的查詢

punch_rec.check_out = Time.now 
punch_rec.save 

當i型Time.now在終端它顯示以下的時間。

2.2.2 :032 > Time.now 
=> 2015-09-28 15:59:06 +0530 

當我從數據庫檢索數據,然後它顯示在UTC time_zone中的時間。正因爲如此,我認爲時間顯示錯誤。

這些是iam執行的步驟。

2.2.2 :038 > p = PunchInOut.find_by_id("28") 
    PunchInOut Load (0.3ms) SELECT `punch_in_outs`.* FROM `punch_in_outs` WHERE `punch_in_outs`.`id` = 28 LIMIT 1 
=> #<PunchInOut id: 28, employee_id: 3, check_in: nil, check_out: nil, date: "2015-09-28", created_at: "2015-09-28 18:37:24", updated_at: "2015-09-28 10:25:22", shift_id: nil, shift_name: nil> 
2.2.2 :039 > p.check_in 
=> nil 
2.2.2 :040 > Time.now 
=> 2015-09-29 00:19:17 +0530 
2.2.2 :041 > p.check_in= Time.now 
=> 2015-09-29 00:19:33 +0530 
2.2.2 :042 > p.save 
    (0.3ms) BEGIN 
    SQL (0.7ms) UPDATE `punch_in_outs` SET `check_in` = '2015-09-28 18:49:33', `updated_at` = '2015-09-28 18:49:38' WHERE `punch_in_outs`.`id` = 28 
    (37.7ms) COMMIT 
=> true 
2.2.2 :043 > p = PunchInOut.find_by_id("28") 
    PunchInOut Load (0.6ms) SELECT `punch_in_outs`.* FROM `punch_in_outs` WHERE `punch_in_outs`.`id` = 28 LIMIT 1 
=> #<PunchInOut id: 28, employee_id: 3, check_in: "2000-01-01 18:49:33", check_out: nil, date: "2015-09-28", created_at: "2015-09-28 18:37:24", updated_at: "2015-09-28 18:49:38", shift_id: nil, shift_name: nil> 
2.2.2 :044 > p.check_in 
=> 2000-01-01 18:49:33 UTC 
2.2.2 :045 > 

我該如何解決這個問題。

+0

Rails的默認保存所有倍到數據庫UTC,然後將它們** **顯示在適當的時區,被轉換的飛行。所以,我希望視圖能夠顯示適當的轉換時間。你可以在你的問題中加入以下信息:a)LOCALY你認爲'att.check_out'什麼時候應該設置爲b)什麼存儲在數據庫中,而不是轉換它(查看你的數據庫終端而不是使用Rails )c)當你執行'<%= att.check_out%>時顯示的是什麼' –

+0

@MaxWilliams我更新了我的問題。 – John

+0

@MaxWilliams,如果導軌每次保存UTC時間。那麼這種說法有什麼用處('config.time_zone ='孟買')?它會做什麼? – John

回答

0

如果您的數據庫設置爲以UTC存儲時間,則無論您在應用中做什麼,UTC時間都將始終以UTC格式存儲。如果您需要將時間顯示給UTC以外的用戶,那麼您需要知道他所在的時區。如果您的所有用戶都在特定的時區,那麼您可以對其進行硬編碼並將其顯示在您的應用中,例如像這樣:

<%= p.check_in.in_time_zone('Mumbai').strftime("%H:%M") %> 

如果您的用戶在不同的時區,那麼你需要首先找到時區,然後你需要正確顯示時間。您可以使用一些寶石或使用JavaScript這是最簡單的解決方案。檢查這個article

0

也許你的服務器有不同的時區。嘗試存儲像這樣的值:p.check_in = Time.zone.now

Time.nowTime.zone.now之間的主要區別是第一個使用服務器的時區,第二個使用application.rb的時區。

讓我知道,如果工程:)

相關問題