我需要找出 Ecto 从数据库中检索到的时间与当前时间(UTC 时间)之间的分钟差。据我所知,如果不使用 Timex 等第三方库,在 Elixir 上进行计时操作并非易事。但是,我想避免使用第三方依赖项。那么我怎样才能找到时差呢?我知道我可以通过 DateTime.utc_now()
获取当前时间,但下一步是如何从数据库中减去日期时间,它在 Ecto.DateTime
中格式,从它?
最佳答案
我相信 Ecto 很快就会有计划暂时使用原生的 Elixir 日期时间格式,我知道你的痛苦。
一种解决方案是将 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)
那么假设这篇文章是大约 1 个月前创建的 (2016-10-25T10:24:23)。
通过上述函数运行它会返回:
{30, {17, 30, 53}}
表示 30 天 17 小时 30 分 53 秒前。
您可以轻松地从那里解构元组并仅获取您需要的组件(在您的情况下为分钟)。
例如
{_, {_h, minutes, _s}} = time_diff
关于time - 在 Elixir 中使用日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40796988/