在 Elixir 中使用日期时间

アレッ*_*ックス 2 time elixir phoenix-framework

我需要找到 Ecto 检索到的数据库时间与当前时间(UTC)之间的分钟数差异。据我所知,如果不使用诸如 Timex 之类的第三方库,在 Elixir 上的计时操作并不是微不足道的。但是,我想避免使用第三方依赖项。那么如何找到时差呢?我知道我可以通过 获取当前时间DateTime.utc_now(),但是接下来如何从数据库中减去日期时间,这是Ecto.DateTime格式?

Har*_*cas 5

我相信 Ecto 很快就会有计划暂时使用原生的 Elixir Datetime 格式,我知道您的痛苦。

一种解决方案是将 ecto 日期时间转换为 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)
Run Code Online (Sandbox Code Playgroud)

因此,假设这篇文章是在大约 1 个月前 (2016-10-25T10:24:23) 创建的。

通过上面的函数运行它会返回:

{30, {17, 30, 53}}

意思是 30 天 17 小时 30 分 53 秒前。

您可以轻松地从那里解构元组并仅获取您需要的组件(在您的情况下为分钟)。

例如

{_, {_h, minutes, _s}} = time_diff
Run Code Online (Sandbox Code Playgroud)