2016-11-25 1 views
1

Ectoで取得したデータベースから現在の時刻までの時間(UTC)の差を求める必要があります。私が知る限り、Elixirで動作するタイミングは、Timexなどのサードパーティライブラリを使用しなければ簡単なことではありません。しかし、私は第三者の依存関係の使用を避けたいと考えています。だから、私はどのように時差を見つけることができますか?私はDateTime.utc_now()で現在の時刻を取得することができますが、それでは、Ecto.DateTime形式のデータベースから日時を引く方法は、次に何ですか?エリクシルのdatetimeの使用

答えて

4

私はEctoが現時点でネイティブのElixir Datetimeフォーマットを使用する予定があると思います。私はあなたの痛みを知っています。 Erlangのカレンダーライブラリを使用していることを比較し、その後

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

そして:

一つの解決策は、Erlangの日時形式にエクト日時を変換することです。例えば、我々はPostモデルを持っていたし、我々はそれが更新されましたどのくらい前に知りたいと思ったと言う:それでは、この記事は、およそ1ヶ月前に作成されたとしましょう

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

を(2016-10-25T10:24:23) 。

返す上記の関数を通してそれを実行:

{30, {17, 30, 53}}

前30日間、17時間、30分53秒を意味。

タプルを破棄して、必要なコンポーネント(あなたの場合は分)だけを簡単に取り出すことができます。

など。

{_, {_h, minutes, _s}} = time_diff 
関連する問題