defmodule AntlDateTimeUtils.Ecto.Query do @moduledoc """ Utils for Ecto.Query around DateTime """ import Ecto.Query @spec where_in_period(Ecto.Queryable.t(), atom, atom, DateTime.t()) :: Ecto.Query.t() def where_in_period(queryable, start_at_key, end_at_key, %DateTime{} = datetime) when is_atom(start_at_key) and is_atom(end_at_key) do from(q in queryable, where: field(q, ^start_at_key) <= ^datetime and (field(q, ^end_at_key) > ^datetime or is_nil(field(q, ^end_at_key))) ) end end