【问题标题】:Working with datetime in Elixir在 Elixir 中使用日期时间
【发布时间】:2016-11-25 11:56:47
【问题描述】:

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

【问题讨论】:

    标签: time elixir phoenix-framework


    【解决方案1】:

    我相信 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2023-04-05
      • 2018-04-04
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      相关资源
      最近更新 更多