Current section
Files
Jump to
Current section
Files
lib/datetime/comparison.ex
defmodule AntlUtilsElixir.DateTime.Comparison do
@moduledoc """
Little wrapper around DateTime
"""
@doc ~S"""
Returns whether datetime1 is greater than datetime2
## Examples
iex> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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 whether datetime1 is equal to datetime2
## Examples
iex> Comparison.eq?(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> Comparison.eq?(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
"""
@spec eq?(DateTime.t(), DateTime.t()) :: boolean()
def eq?(%DateTime{} = dt1, %DateTime{} = dt2) do
DateTime.compare(dt1, dt2) == :eq
end
@doc ~S"""
Returns the min date between datetime1 and datetime2
## Examples
iex> 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> 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> 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> 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> 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> 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