如何比较Phoenix / Ecto中2个日期的会议纪要?

时间:2017-02-08 00:44:54

标签: elixir phoenix-framework ecto

我想找到“utc now”和Ecto.DateTime类型变量之间的分钟时差。最简单的方法是什么?我应该在unix时间内转换它们并减去而不是进行模式匹配并首先比较年,月,日和小时,并且仅在实际减去分钟后才进行比较吗?我不打算使用任何第三方依赖项。

3 个答案:

答案 0 :(得分:1)

JIC:Ecto.DateTime is a struct并且它有一个Ecto.DateTime.from_erl/1帮助器(以及from_unix!和其他一些帮助器。)它还负责使用Ecto.DateTime.utc/1生成“utc now”

Elixir DateTime反过来to_unix/2,因此可能会:

dt1, dt2 = [ecto_time, Ecto.DateTime.utc]
           |> Enum.map(&Ecto.DateTime.to_erl/1)
           |> Enum.map(&NaiveDateTime.from_erl!/1)
           |> Enum.map(&DateTime.from_naive!(&1, "Etc/UTC"))
           |> Enum.map(&DateTime.to_unix(&1))
mins = (dt1 - dt2) / 60

答案 1 :(得分:1)

您可以使用UTC时区将Ecto.DateTime转换为DateTime,然后比较他们的to_unix

iex(1)> now = DateTime.utc_now |> DateTime.to_unix
1486544161
iex(2)> now2 = Ecto.DateTime.utc |> Ecto.DateTime.to_erl |> NaiveDateTime.from_erl! |> DateTime.from_naive!("Etc/UTC") |> DateTime.to_unix
1486544206
iex(3)> (now2 - now) / 60
0.75

模式匹配不是一个好主意,因为您必须在添加/减去后处理年/月/日/小时/分钟/秒溢出的每个案例。

答案 2 :(得分:0)

Elixir现在有DateTime.diff/3方法。

DateTime.diff(dt1, dt2, :minute)

(在你的情况下,dtx是DateTime.utc_now