2017-01-05 23 views
0

我正在嘗試在用戶時區中獲取時間,直到凌晨12:00。我怎樣才能做到這一點在鐵軌?在用戶時區中獲取時間直到小時

我想得到的時間,直到上午12:00,然後將該時間添加到當前時間在軌道將其存儲在數據庫中,因爲我想有一個與GMT時間在一個字段相當於12: 6:00 AM在用戶的時區

我用這種寶石:

gem 'time_difference', '~> 0.5.0'

爲了得到兩個時間戳

TimeDifference.between(DateTime.now, created_at) 
之間的時間差

但是我不確定如何在用戶時區到凌晨12:00獲取時間。

感謝

回答

0

對於一個特定的時區,你可以使用Rails的工具與時區交易,只是直接找出當午夜是爲特定的時區。這個例子假定你有你的用戶模型time_zone柱,用適當的值(例如,America/Chicago,或其他任何Rails supports):

midnight_for_user = ActiveSupport::TimeZone[user.time_zone].now.midnight.tomorrow 

例如,我可以使用相同的邏輯來發現當午夜的在紐約的人:

pry(main)> Time.current 
=> Thu, 05 Jan 2017 10:34:02 CST -06:00 
pry(main)> ActiveSupport::TimeZone['America/New_York'].now.midnight.tomorrow 
=> Fri, 06 Jan 2017 00:00:00 EST -05:00 

請注意,我正在尋找明天午夜;請記住,某一天的「午夜」實際上是一天中的第一分鐘,而不是最後一分鐘。

+0

羅伯特,非常感謝。我如何使用它來基本知道GMT(軌道默認時間)爲用戶的午夜多少小時?這使我感到困惑。謝謝 – Walker

+0

您認爲我現在可以在幾秒鐘內將GMT轉換爲用戶時區,然後查找用戶時區的午夜到現在用戶時區的秒數差異,並將這些秒數添加到現在的GMT時間中? @RobertNubel – Walker

+0

@Walker你可以,但是如果你只是想在GMT存儲用戶的午夜,將上面計算的'midnight_for_user'保存到模型中會自動將該時間轉換爲數據庫中的GMT。如果您想手動執行轉換,只需調用'midnight_for_user.utc'(請記住GMT和UTC是相同的)。 –