This protocol defines the API for functions which take a Date,
NaiveDateTime, or DateTime as input.
Built-in implementations assume Calendar.ISO inputs with years from 0
through 9999. The public Timex entrypoints enforce these preconditions and
return explicit unsupported-calendar or unsupported-year errors. Direct
protocol callers must validate inputs themselves.
Summary
Functions
Get a new version of the date/time value representing the beginning of the day
Get a new version of the date/time value representing the beginning of it's month
Get a new version of the date/time value representing the beginning of it's quarter
Get a new version of the date/time value representing the beginning of it's week,
providing a weekday name (as an atom) for the day which starts the week, i.e. :mon.
Get a new version of the date/time value representing the beginning of it's year
Get the century a date/time value is in
Get the ordinal day number of the given date/time value
Get the number of days in the month for the given date/time value
Get a new version of the date/time value representing the end of the day
Get a new version of the date/time value representing the ending of it's month
Get a new version of the date/time value representing the ending of it's quarter
Get a new version of the date/time value representing the ending of it's week,
providing a weekday name (as an atom) for the day which starts the week, i.e. :mon.
Get a new version of the date/time value representing the ending of it's year
Shifts the given date/time value to the ISO day given
Return a boolean indicating whether the date/time value is in a leap year
Determine if the provided date/time value is valid.
Return a pair {year, week number} (as defined by ISO 8601) that the given date/time value falls on.
Get the quarter for the given date/time value
Set fields on a date/time value using a list of unit/value pairs
Shift a date/time value using a list of shift unit/value pairs
Convert a date/time value to a Date
Convert a date/time value to a DateTime.
A timezone must be provided. Use Timex.to_datetime/1 for the default timezone.
Convert a date/time value to it's Erlang tuple variant
i.e. Date becomes {y,m,d}, DateTime/NaiveDateTime become
{{y,m,d},{h,mm,s}}
Convert a date/time value to gregorian microseconds (microseconds since the start of year zero)
Convert a date/time value to gregorian seconds (seconds since start of year zero)
Convert a date/time value to a Julian calendar date number
Convert a date/time value to a NaiveDateTime
Convert a date/time value to seconds since the UNIX Epoch
Get the week number within the month of the given date/time value, starting at 1.
Get the ordinal weekday number of the given date/time value
Get the ordinal weekday number of the given date/time value and relative to the given weekstart
Types
@type t() :: term()
All the types that implement this protocol.
Functions
@spec beginning_of_day(Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the beginning of the day
@spec beginning_of_month(Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the beginning of it's month
@spec beginning_of_quarter(Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the beginning of it's quarter
@spec beginning_of_week(Timex.Types.valid_datetime(), Timex.Types.weekstart()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the beginning of it's week,
providing a weekday name (as an atom) for the day which starts the week, i.e. :mon.
@spec beginning_of_year(Timex.Types.year() | Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the beginning of it's year
@spec century(Timex.Types.year() | Timex.Types.valid_datetime()) :: non_neg_integer() | {:error, term()}
Get the century a date/time value is in
@spec day(Timex.Types.valid_datetime()) :: Timex.Types.daynum() | {:error, term()}
Get the ordinal day number of the given date/time value
@spec days_in_month(Timex.Types.valid_datetime()) :: Timex.Types.num_of_days() | {:error, term()}
Get the number of days in the month for the given date/time value
@spec end_of_day(Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the end of the day
@spec end_of_month(Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the ending of it's month
@spec end_of_quarter(Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the ending of it's quarter
@spec end_of_week(Timex.Types.valid_datetime(), Timex.Types.weekstart()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the ending of it's week,
providing a weekday name (as an atom) for the day which starts the week, i.e. :mon.
@spec end_of_year(Timex.Types.year() | Timex.Types.valid_datetime()) :: Timex.Types.valid_datetime() | {:error, term()}
Get a new version of the date/time value representing the ending of it's year
@spec from_iso_day(Timex.Types.valid_datetime(), non_neg_integer()) :: Timex.Types.valid_datetime() | {:error, term()}
Shifts the given date/time value to the ISO day given
@spec is_leap?(Timex.Types.valid_datetime() | Timex.Types.year()) :: boolean() | {:error, term()}
Return a boolean indicating whether the date/time value is in a leap year
@spec is_valid?(Timex.Types.valid_datetime()) :: boolean() | {:error, term()}
Determine if the provided date/time value is valid.
@spec iso_week(Timex.Types.valid_datetime()) :: {Timex.Types.year(), Timex.Types.weeknum()} | {:error, term()}
Return a pair {year, week number} (as defined by ISO 8601) that the given date/time value falls on.
@spec quarter(Timex.Types.month() | Timex.Types.valid_datetime()) :: 1..4 | {:error, term()}
Get the quarter for the given date/time value
@spec set(Timex.Types.valid_datetime(), Timex.set_options()) :: Timex.Types.valid_datetime() | {:error, term()}
Set fields on a date/time value using a list of unit/value pairs
@spec shift(Timex.Types.valid_datetime(), Timex.shift_options()) :: Timex.Types.valid_datetime() | Timex.AmbiguousDateTime.t() | {:error, term()}
Shift a date/time value using a list of shift unit/value pairs
@spec to_date(Timex.Types.valid_datetime()) :: Date.t() | {:error, term()}
Convert a date/time value to a Date
@spec to_datetime(Timex.Types.valid_datetime(), Timex.Types.valid_timezone()) :: DateTime.t() | Timex.AmbiguousDateTime.t() | {:error, term()}
Convert a date/time value to a DateTime.
A timezone must be provided. Use Timex.to_datetime/1 for the default timezone.
@spec to_erl(Timex.Types.valid_datetime()) :: Timex.Types.date() | Timex.Types.datetime() | {:error, term()}
Convert a date/time value to it's Erlang tuple variant
i.e. Date becomes {y,m,d}, DateTime/NaiveDateTime become
{{y,m,d},{h,mm,s}}
@spec to_gregorian_microseconds(Timex.Types.valid_datetime()) :: non_neg_integer() | {:error, term()}
Convert a date/time value to gregorian microseconds (microseconds since the start of year zero)
@spec to_gregorian_seconds(Timex.Types.valid_datetime()) :: non_neg_integer() | {:error, term()}
Convert a date/time value to gregorian seconds (seconds since start of year zero)
@spec to_julian(Timex.Types.valid_datetime()) :: integer() | {:error, term()}
Convert a date/time value to a Julian calendar date number
@spec to_naive_datetime(Timex.Types.valid_datetime()) :: NaiveDateTime.t() | {:error, term()}
Convert a date/time value to a NaiveDateTime
@spec to_unix(Timex.Types.valid_datetime()) :: non_neg_integer() | {:error, term()}
Convert a date/time value to seconds since the UNIX Epoch
@spec week_of_month(Timex.Types.valid_datetime()) :: Timex.Types.week_of_month() | {:error, term()}
Get the week number within the month of the given date/time value, starting at 1.
Weeks begin on Monday. The partial week containing the first day of the month is week 1, even when it begins in the preceding month or ISO year. A month can contain up to six weeks.
@spec weekday(Timex.Types.valid_datetime()) :: Timex.Types.weekday() | {:error, term()}
Get the ordinal weekday number of the given date/time value
@spec weekday(Timex.Types.valid_datetime(), Timex.Types.weekday_name()) :: Timex.Types.weekday() | {:error, term()}
Get the ordinal weekday number of the given date/time value and relative to the given weekstart