ECTO考虑时区



我正在使用ecto在postgres db上进行查询。

问题是DB具有带有UTC DateTime的字段,但是在比较之前,我需要查询将此数据转换为本地时区。

from(u in User) |> where([u], u.created_at < ^input_datetime) |> Repo.all

上面的表达式将以UTC格式考虑创建的_at进行比较。我不想要这个。我希望ECTO转换创建的_AT到本地时区,然后再进行比较才能返回正确的结果。

有没有办法做到这一点?

您需要在进行查询之前将input_date转换为适当的时区。

input_date
|> Date.from_iso8601!()
|> Timex.to_datetime(timezone)
|> Timex.to_datetime()

应该将输入日期转换为您要比较的时区,然后将其转换为DateTime的UTC表示形式,以便在ECTO查询中进行比较。

请注意,您自己需要将其转换为UTC的唯一原因是因为时间戳(inserted_atupdated_at(默认情况下是:naive_datetime类型。如果它们是:utc_datetime,它将为您完成转换。

(在此处进行完整的对话:https://elixirforum.com/t/functions-used-in-db-field/12673(

相关内容

  • 没有找到相关文章

最新更新