Как сравнить даты с Elixir и Ecto

У меня есть экземпляр Ecto.DateTime, который я получаю из столбца базы данных, и мне нужно проверить, была ли эта дата более 5 минут в прошлом.

Каков наилучший способ сделать это?

Чтобы сделать это более понятным, это то, что мне нужно в ruby ​​- >

updated_at < (Time.now - 5.minutes)

Ответы

Ответ 1

Вы можете сделать это с помощью datetime_add/3, используя отрицательное значение в качестве аргумента count:

from u in User,
  where: u.reset_password_sent_at > datetime_add(^Ecto.DateTime.utc, -5, "minute")

Если вам нужно сделать это без использования запроса, вы можете использовать функции в : calendar модуль erlang:

ecto_5_mins_ago =
  Ecto.DateTime.utc
  |> Ecto.DateTime.to_erl
  |> :calendar.datetime_to_gregorian_seconds
  |> Kernel.-(60 * 5)
  |> :calendar.gregorian_seconds_to_datetime
  |> Ecto.DateTime.from_erl

Ecto.DateTime.compare(u.reset_password_token, ecto_5_mins_ago)