Я получаю из клиентского приложения некоторые даты в виде 2017-03-20 17:01:24, которые я хочу сравнить и извлечь количество часов, дней, минут или любой доступный счетчик (я бы предпочел, чтобы он был гибким).

Я видел пакет 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)
3
Romeo Mihalcea 21 Мар 2017 в 16:57

2 ответа

Лучший ответ

Не достигни этого, делая.

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 Может быть, я неправильно понимаю ваш вопрос?

4
MartinElvar 21 Мар 2017 в 14:10

Может быть, я опоздал, но если вам нужны дни, вы можете использовать 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"

0
elchemista 19 Апр 2019 в 17:16