Packages
timex
3.1.20
3.7.13
3.7.12
3.7.11
3.7.9
3.7.8
3.7.7
3.7.6
3.7.5
3.7.3
3.7.2
3.7.1
3.7.0
3.6.4
3.6.3
3.6.2
retired
3.6.1
3.6.0
3.5.0
3.4.2
3.4.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.25
retired
3.1.24
3.1.23
3.1.22
3.1.21
3.1.20
3.1.19
3.1.18
3.1.17
3.1.16
3.1.15
3.1.13
3.1.12
3.1.11
3.1.10
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.2.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
1.0.2
1.0.1
1.0.0
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
1.0.0-pre
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.6.0
0.5.0
0.4.8
0.4.7
0.4.6
Timex is a rich, comprehensive Date/Time library for Elixir projects, with full timezone support via the :tzdata package. If you need to manipulate dates, times, datetimes, timestamps, etc., then Timex is for you!
Current section
Files
Jump to
Current section
Files
lib/datetime/map.ex
defimpl Timex.Protocol, for: Map do
@moduledoc """
This is an implementation of Timex.Protocol for plain maps,
which allows working directly with deserialized date/times
via the Timex API. It accepts date/time maps with either atom
or string keys, as long as those keys match current Calendar
types. It also accepts a few legacy variations for types which
may have been serialized with older versions of Timex.
"""
defmacro convert!(map, function, args \\ []) when is_list(args) do
quote do
case Timex.Convert.convert_map(unquote(map)) do
{:error, reason} -> raise reason
converted -> apply(Timex.Protocol, unquote(function), [converted | unquote(args)])
end
end
end
defmacro convert(map, function, args \\ []) when is_list(args) do
quote do
case Timex.Convert.convert_map(unquote(map)) do
{:error, _} = err -> err
converted -> apply(Timex.Protocol, unquote(function), [converted | unquote(args)])
end
end
end
def to_julian(map), do: convert!(map, :to_julian)
def to_gregorian_seconds(map), do: convert!(map, :to_gregorian_seconds)
def to_gregorian_microseconds(map), do: convert!(map, :to_gregorian_microseconds)
def to_unix(map), do: convert!(map, :to_unix)
def to_date(map), do: convert!(map, :to_date)
def to_datetime(map, timezone), do: convert(map, :to_datetime, [timezone])
def to_naive_datetime(map), do: convert(map, :to_naive_datetime)
def to_erl(map), do: convert(map, :to_erl)
def century(map), do: convert!(map, :century)
def is_leap?(map), do: convert!(map, :is_leap?)
def shift(map, options), do: convert(map, :shift, [options])
def set(map, options), do: convert(map, :set, [options])
def beginning_of_day(map), do: convert!(map, :beginning_of_day)
def end_of_day(map), do: convert!(map, :end_of_day)
def beginning_of_week(map, start), do: convert(map, :beginning_of_week, [start])
def end_of_week(map, start), do: convert(map, :end_of_week, [start])
def beginning_of_year(map), do: convert!(map, :beginning_of_year)
def end_of_year(map), do: convert!(map, :end_of_year)
def beginning_of_quarter(map), do: convert!(map, :beginning_of_quarter)
def end_of_quarter(map), do: convert!(map, :end_of_quarter)
def beginning_of_month(map), do: convert!(map, :beginning_of_month)
def end_of_month(map), do: convert!(map, :end_of_month)
def quarter(map), do: convert!(map, :quarter)
def days_in_month(map), do: convert!(map, :days_in_month)
def week_of_month(map), do: convert!(map, :week_of_month)
def weekday(map), do: convert!(map, :weekday)
def day(map), do: convert!(map, :day)
def is_valid?(map), do: convert!(map, :is_valid?)
def iso_week(map), do: convert!(map, :iso_week)
def from_iso_day(map, day), do: convert(map, :from_iso_day, [day])
end