Elixir:如何获取 Ecto 查询的当前日期?

Elixir: How to get the current date for an Ecto Query?

我不得不问这个有点开玩笑,但真的不清楚最好的方法是什么。所以这可能会变成一个小小的咆哮。但我觉得 Elixir 在这里严重缺乏。

我发现获取当前日期以在 Ecto 中再次查询当前日期非常复杂。例如 get me every record where date column x contains a date before t

截至目前,我使用 Erlangs :calendar.universal_time(),将其传递给 Ecto.DateTime.from_erl,然后再次传递给 Ecto.Date.cast

date = :calendar.universal_time() |> Ecto.DateTime.from_erl |> Ecto.Date.cast

请注意,我们还必须对实际日期进行模式匹配,因为我们得到了一个元组

{:ok, #Ecto.Date<2016-10-25>}

原来如此

{:ok, date} = :calendar.universal_time() |> Ecto.DateTime.from_erl |> Ecto.Date.cast

当然我可以使用 Ecto.Date.cast! 但这又是你必须找出的东西,并且可能有一些我不知道的缺点。

然后我可以构建查询。但是我每次至少要调用3个函数...

query = from m in Model, select: {m.name, m.email}, where: (m.canceled_to > ^date), order_by: [desc: m.inserted_at]
result = Repo.all(query)

那么有没有我想念的更好的方法?

在 Ecto 中获取当前日期 - Ecto.Date.utc/0