Packages

Elixir utils about datetime.

Current section

Files

Jump to
antl_datetime_utils lib comparison.ex
Raw

lib/comparison.ex

defmodule AntlDateTimeUtils.Comparison do
@moduledoc """
Little wrapper around DateTime
"""
@doc ~S"""
Returns whether datetime1 is greater than datetime2
## Examples
iex> AntlDateTimeUtils.Comparison.gt?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"))
false
iex> AntlDateTimeUtils.Comparison.gt?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
false
iex> AntlDateTimeUtils.Comparison.gt?(DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
true
"""
@spec gt?(DateTime.t(), DateTime.t()) :: boolean()
def gt?(%DateTime{} = dt1, %DateTime{} = dt2) do
DateTime.compare(dt1, dt2) == :gt
end
@doc ~S"""
Returns whether datetime1 is greater than or equal to datetime2
## Examples
iex> AntlDateTimeUtils.Comparison.gte?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"))
false
iex> AntlDateTimeUtils.Comparison.gte?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
true
iex> AntlDateTimeUtils.Comparison.gte?(DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
true
"""
@spec gte?(DateTime.t(), DateTime.t()) :: boolean()
def gte?(%DateTime{} = dt1, %DateTime{} = dt2) do
DateTime.compare(dt1, dt2) in [:eq, :gt]
end
@doc ~S"""
Returns whether datetime1 is less than datetime2
## Examples
iex> AntlDateTimeUtils.Comparison.lt?(DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
false
iex> AntlDateTimeUtils.Comparison.lt?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
false
iex> AntlDateTimeUtils.Comparison.lt?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"))
true
"""
@spec lt?(DateTime.t(), DateTime.t()) :: boolean()
def lt?(%DateTime{} = dt1, %DateTime{} = dt2) do
DateTime.compare(dt1, dt2) == :lt
end
@doc ~S"""
Returns whether datetime1 is less than or equal to datetime2
## Examples
iex> AntlDateTimeUtils.Comparison.lte?(DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
false
iex> AntlDateTimeUtils.Comparison.lte?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
true
iex> AntlDateTimeUtils.Comparison.lte?(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"))
true
"""
@spec lte?(DateTime.t(), DateTime.t()) :: boolean()
def lte?(%DateTime{} = dt1, %DateTime{} = dt2) do
DateTime.compare(dt1, dt2) in [:eq, :lt]
end
@doc ~S"""
Returns the min date between datetime1 and datetime2
## Examples
iex> AntlDateTimeUtils.Comparison.min(DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC")
iex> AntlDateTimeUtils.Comparison.min(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC")
iex> AntlDateTimeUtils.Comparison.min(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"))
DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC")
"""
@spec min(DateTime.t(), DateTime.t()) :: DateTime.t()
def min(%DateTime{} = dt1, %DateTime{} = dt2) do
if lt?(dt1, dt2) do
dt1
else
dt2
end
end
@doc ~S"""
Returns the max date between datetime1 and datetime2
## Examples
iex> AntlDateTimeUtils.Comparison.max(DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC")
iex> AntlDateTimeUtils.Comparison.max(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"))
DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC")
iex> AntlDateTimeUtils.Comparison.max(DateTime.from_naive!(~N[2018-01-01 00:00:00], "Etc/UTC"), DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC"))
DateTime.from_naive!(~N[2018-01-02 00:00:00], "Etc/UTC")
"""
@spec max(DateTime.t(), DateTime.t()) :: DateTime.t()
def max(%DateTime{} = dt1, %DateTime{} = dt2) do
if gt?(dt1, dt2) do
dt1
else
dt2
end
end
end