一個Rails應(yīng)用有三個時間:
- 服務(wù)器系統(tǒng)的時間
- Rails應(yīng)用的時間
- 存入數(shù)據(jù)庫的時間
如果你想存入本地時間到數(shù)據(jù)庫中坏瘩。
首先,你要先確保系統(tǒng)時間是正確的。
其次,你要把應(yīng)用的時區(qū)設(shè)置為本地時區(qū)
最后敛纲,ActiveRecord的時區(qū)也設(shè)置為本地時區(qū)
按照上述可以寫出下面的代碼
config.time_zone = "beijing" # 從ActiveRecord中取的時候是本地時間
config.active_record.default_timezone = :local # 存入數(shù)據(jù)庫的時間也是本地時區(qū)的時間
config.active_record.time_zone_aware_attributes = false # 關(guān)閉以UTC格式存入數(shù)據(jù)庫并讀取以本地時區(qū)格式讀取的功能
這樣就可以以本地時區(qū)時間存入數(shù)據(jù)庫。
如果你的應(yīng)用是面對全球用戶剂癌。
建議以utc的時區(qū)存到數(shù)據(jù)庫淤翔,每次查詢的時候,轉(zhuǎn)換成本地時區(qū)就可以佩谷。那么旁壮,Rails是默認時區(qū)utc,所以就不用配置application.rb
去掉
config.time_zone = "beijing" # 從ActiveRecord中取的時候是本地時間
config.active_record.default_timezone = :local # 存入數(shù)據(jù)庫的時間也是本地時區(qū)的時間
config.active_record.time_zone_aware_attributes = false # 關(guān)閉以UTC格式存入數(shù)據(jù)庫并讀取以本地時區(qū)格式讀取的功能
那么琳要,我們要查詢今天一天的訂單寡具,怎么做呢?
Order.where(created_at: Time.now.beginning_of_day..Time.now.end_of_day )
Time.now是本地時區(qū)的時間稚补,Rails會自動識別并去掉時區(qū)差童叠。
比如北京時區(qū),那么课幕,會beginning_of_day會從今天的00:00變成昨天的16:00厦坛,自動減8小時。
同樣的乍惊,end_of_day也會減8小時杜秸,也就是從15:59:59.999999,如下圖
image.png
這樣就能準確查詢出這一天所有的訂單