time - 在 Elixir 中使用日期时间

标签 time elixir phoenix-framework

我需要找出 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/

相关文章:

elixir - 使用 Guardian 创建电子邮件验证 URL

elixir - 我何时应该生成混合伞与 Phoenix 伞?

release - 运行 Phoenix 应用程序版本时 exrm 崩溃

python - 从 DataFrame 中的时间格式数据中删除小数秒

c++ - 以毫秒为单位的时间戳在 C++ 中给出了 10 位数字?

elixir - 为什么 Elixir 中没有 return 语句

erlang - 如何检查 ETS Erlang/Elixir 中是否存在命名表

jquery - 开始后取消/停止 jquery fadeOut

python - 计算时间差(以分钟为单位)

elixir - 如何使用 created_at date Elixir 进行 Enum.sort_by 和搜索