【问题标题】:Elixir: How to get the current date for an Ecto Query?Elixir:如何获取 Ecto 查询的当前日期?
【发布时间】:2026-01-03 09:10:02
【问题描述】:

我不得不问这个问题有点开玩笑,但目前还不清楚最好的方法是什么。所以这可能会变成一个小小的咆哮。但是我有一种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)

那么我错过了更好的方法吗?

【问题讨论】:

标签: elixir ecto


【解决方案1】:

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

【讨论】: