2016-11-25 97 views
1

我需要從Ecto檢索的數據庫到UTC的當前時間之間查找分鐘之差。據我所知,如果不使用Timex等第三方庫,在Elixir上運行的時序並不是微不足道的。然而,我想避免使用第三方依賴關係。那麼我怎麼能找到一個時間差異?我知道我可以通過DateTime.utc_now()得到當前時間,但接下來是什麼,如何從數據庫中減去日期時間,格式爲Ecto.DateTime在Elixir中使用datetime

回答

4

我相信很快Ecto就有計劃暫時使用原生Elixir Datetime格式,我知道你的痛苦。

一種解決方案是到胞外日期時間轉換爲Erlang的日期時間格式:

{{YYYY, MM, DD}, {HH, MM, SS}}

,然後比較,使用Erlang的日曆庫。例如,假設我們有一個Post模型,我們想知道它是多久前更新:

Repo.Post.get!(%Post{}, 1).created_at 
|> Ecto.DateTime.to_erl 
|> :calendar.time_difference(:calendar.universal_time) 

所以我們說這個帖子被創建大約1個月前(2016-10-25T10:24:23) 。

運行它通過上面的函數將返回:

{30, {17, 30, 53}}

含義30天17小時30分53秒前。

你可以很容易地從那裏解構元組,並只取得你需要的組件(在你的情況下是分鐘)。

E.g.

{_, {_h, minutes, _s}} = time_diff