2016-02-29 74 views
2

我想從表中獲取值的週數據如下Time.now.beginning_of_week給人兩種不同的價值觀

Answer.where("ct_id = ? AND ot_id = ? AND created_at >= ?",16,72,Time.now.beginning_of_week) 

它觸發查詢

Answer Load (0.3ms) SELECT `answers`.* FROM `answers` WHERE (ct_id = 16 AND ot_id = 72 AND created_at >= '2016-02-28 18:30:00') 

時間在上面的查詢是 '2016年2月28日18:30:00'

但是在軌安慰值爲

Time.now.beginning_of_week => 2016年2月29日00:00:00 0530

因此,這是正確的值,爲什麼它給兩個不同的值,當我在控制檯嘗試。

我知道Time.now.beginning_of_week是從星期天即18日開始的一週,但爲什麼當我在控制檯中顯示星期一的第19個星期時。

希望有人能澄清我對此的疑問。

回答

2

當您在控制檯中觸發Time.now.beginning_of_week時,它會給您本地時區的時間,即+5.30(印度標準時間)。

存儲在數據庫中的所有時間都存儲在utc中。

Answer.where("ct_id = ? AND ot_id = ? AND created_at >= ?",16,72,Time.now.beginning_of_week) 

當我們在上面的查詢使用Time.now.beginning_of_week,它會得到轉換爲UTC,因爲我們需要存儲在數據庫記錄,這是在UTC比較。

要將時間2016-02-29 00:00:00 +0530轉換爲utc時間,我們必須從中減去-5.30,因爲它是utc中的+5.30。

Time in utc = 2016-02-29 (00:00:00 - 5.30) 
Time in utc = 2016-02-29 18.30 

更新:

如果你想獲得beginning_of_week在UTC。您可以在導軌中執行以下操作4.不確定導軌是否可以使用3.

Date.today.beginning_of_week.to_time(:utc) # o/p 2016-02-29 00:00:00 UTC