获得elixir中两个(字符串)日期之间的差异

时间:2017-03-21 13:57:24

标签: elixir phoenix-framework

我从客户端应用程序收到2017-03-20 17:01:24形式的某些日期,我想比较并提取小时数,天数,分钟数或任何可用的计数器(我希望它灵活)。< / p>

我看到timex包的内容如下:

Duration.diff(Duration.now, Duration.zero, :days)

我的问题是我不知道如何使这个diff与我的两个日期一起工作。

我尝试过:

end_timex = Timex.parse!("2017-03-20 17:01:24", "%Y-%m-%d %H:%M:%S", :strftime)
start_timex = Timex.parse!("2017-03-19 17:01:24", "%Y-%m-%d %H:%M:%S", :strftime)
diff = Duration.diff(end_timex, start_timex, :days)

但显然失败了:

** (FunctionClauseError) no function clause matching in Timex.Duration.diff/3
    (timex) lib/time/duration.ex:612: Timex.Duration.diff(~N[2017-03-20 17:01:24], ~N[2017-03-19 17:01:24], :days)

2 个答案:

答案 0 :(得分:3)

不要通过这样做来实现这一目标。

end_timex = Timex.parse!("2017-03-20 17:01:24", "%Y-%m-%d %H:%M:%S", :strftime)
start_timex = Timex.parse!("2017-03-19 17:01:24", "%Y-%m-%d %H:%M:%S", :strftime)
diff_in_days = Timex.diff(end_timex, start_timex, :days)
---> 1 
diff_in_hours = Timex.diff(end_timex, start_timex, :hours)
---> 24

此处记录https://hexdocs.pm/timex/2.1.5/Timex.Comparable.html#diff/3 也许我误解了你的问题?

答案 1 :(得分:0)

也许我来晚了,但是如果您只需要几天,就可以使用Date.diff

代码可能看起来像这样:

  with {:ok, date} <- Date.from_iso8601(string_date) do 
       Date.diff(date, Date.utc_today)
  end

如果您有DateTime.diff,也可以使用"%Y-%m-%d %H:%M:%S"