Cldr.Calendar.Interval (Cldr Calendars v1.14.0) View Source

Implements functions to return intervals and compare date intervals.

In particular it provides functions which return an interval (as a Date.Range.t) for years, quarters, months, weeks and days.

In general, the intervals created with the packaage calendar_interval are to be preferred since they can used over different time precisions whereas the functions in this module are all intervals of a day. In order to be used with ex_cldr_calendars, version "~> 0.2" of calendar_interval is required.

Note however that as of release 0.2, calendar_interval does not support intervals of quarters or weeks.

Link to this section Summary

Functions

Compare two date ranges.

Returns a Date.Range.t that represents the day.

Returns a Date.Range.t that represents the year.

Returns a Date.Range.t that represents the quarter.

Returns a Date.Range.t that represents the year.

Returns a Date.Range.t that represents the year.

Link to this section Functions

Specs

compare(range_1 :: Date.Range.t(), range_2 :: Date.Range.t()) ::
  Cldr.Calendar.interval_relation()

Compare two date ranges.

Uses Allen's Interval Algebra to return one of 13 different relationships:

RelationConverse
:precedes:preceded_by
:meets:met_by
:overlaps:overlapped_by
:finished_by:finishes
:contains:during
:starts:started_by
:equals:equals

Arguments

  • range_1 is a Date.Range.t

  • range_2 is a Date.Range.t

Returns

An atom representing the relationship between the two ranges.

Examples

iex> Cldr.Calendar.Interval.compare Cldr.Calendar.Interval.day(~D[2019-01-01]),
...> Cldr.Calendar.Interval.day(~D[2019-01-02])
:meets

iex> Cldr.Calendar.Interval.compare Cldr.Calendar.Interval.day(~D[2019-01-01]),
...> Cldr.Calendar.Interval.day(~D[2019-01-03])
:precedes

iex> Cldr.Calendar.Interval.compare Cldr.Calendar.Interval.day(~D[2019-01-03]),
...> Cldr.Calendar.Interval.day(~D[2019-01-01])
:preceded_by

iex> Cldr.Calendar.Interval.compare Cldr.Calendar.Interval.day(~D[2019-01-02]),
...> Cldr.Calendar.Interval.day(~D[2019-01-01])
:met_by

iex> Cldr.Calendar.Interval.compare Cldr.Calendar.Interval.day(~D[2019-01-02]),
...> Cldr.Calendar.Interval.day(~D[2019-01-02])
:equals

Specs

day(Date.t()) :: Date.Range.t()

Returns a Date.Range.t that represents the day.

The range is enumerable.

Arguments

  • year is any year for calendar

  • day is any day in the year for calendar

  • calendar is any module that implements the Calendar and Cldr.Calendar behaviours. The default is Cldr.Calendar.Gregorian.

Returns

  • A Date.Range.t() representing the the enumerable days in the week

Examples

iex> Cldr.Calendar.Interval.day 2019, 52, Cldr.Calendar.Fiscal.US
#DateRange<~D[2019-02-21 Cldr.Calendar.Fiscal.US], ~D[2019-02-21 Cldr.Calendar.Fiscal.US]>

iex> Cldr.Calendar.Interval.day 2019, 92, Cldr.Calendar.NRF
#DateRange<~D[2019-W14-1 Cldr.Calendar.NRF], ~D[2019-W14-1 Cldr.Calendar.NRF]>

Cldr.Calendar.Interval.day 2019, 8, Cldr.Calendar.ISOWeek
#DateRange<%Date{calendar: Cldr.Calendar.ISOWeek, day: 1, month: 2, year: 2019}, %Date{calendar: Cldr.Calendar.ISOWeek, day: 1, month: 2, year: 2019}>
Link to this function

day(year, day, calendar \\ Cldr.Calendar.Gregorian)

View Source

Specs

Specs

month(Date.t()) :: Date.Range.t()

Returns a Date.Range.t that represents the year.

The range is enumerable.

Arguments

  • year is any year for calendar

  • month is any month in the year for calendar

  • calendar is any module that implements the Calendar and Cldr.Calendar behaviours. The default is Cldr.Calendar.Gregorian.

Returns

  • A Date.Range.t() representing the the enumerable days in the month

Examples

iex> Cldr.Calendar.Interval.month 2019, 3, Cldr.Calendar.Fiscal.UK
#DateRange<~D[2019-03-01 Cldr.Calendar.Fiscal.UK], ~D[2019-03-30 Cldr.Calendar.Fiscal.UK]>

iex> Cldr.Calendar.Interval.month 2019, 3, Cldr.Calendar.Fiscal.US
#DateRange<~D[2019-03-01 Cldr.Calendar.Fiscal.US], ~D[2019-03-31 Cldr.Calendar.Fiscal.US]>
Link to this function

month(year, month, calendar \\ Cldr.Calendar.Gregorian)

View Source

Specs

Specs

quarter(Date.t()) :: Date.Range.t()

Returns a Date.Range.t that represents the quarter.

The range is enumerable.

Arguments

  • year is any year for calendar

  • quarter is any quarter in the year for calendar

  • calendar is any module that implements the Calendar and Cldr.Calendar behaviours. The default is Cldr.Calendar.Gregorian.

Returns

  • A Date.Range.t() representing the the enumerable days in the quarter

Examples

iex> Cldr.Calendar.Interval.quarter 2019, 2, Cldr.Calendar.Fiscal.UK
#DateRange<~D[2019-04-01 Cldr.Calendar.Fiscal.UK], ~D[2019-06-30 Cldr.Calendar.Fiscal.UK]>

iex> Cldr.Calendar.Interval.quarter 2019, 2, Cldr.Calendar.ISOWeek
#DateRange<~D[2019-W14-1 Cldr.Calendar.ISOWeek], ~D[2019-W26-7 Cldr.Calendar.ISOWeek]>
Link to this function

quarter(year, quarter, calendar \\ Cldr.Calendar.Gregorian)

View Source

Specs

Specs

week(Date.t()) :: Date.Range.t()

Returns a Date.Range.t that represents the year.

The range is enumerable.

Arguments

  • year is any year for calendar

  • week is any week in the year for calendar

  • calendar is any module that implements the Calendar and Cldr.Calendar behaviours. The default is Cldr.Calendar.Gregorian.

Returns

  • A Date.Range.t() representing the the enumerable days in the week or

  • {:error, :not_defined} if the calendar does not support the concept of weeks

Examples

iex> Cldr.Calendar.Interval.week 2019, 52, Cldr.Calendar.Fiscal.US
#DateRange<~D[2019-12-22 Cldr.Calendar.Fiscal.US], ~D[2019-12-28 Cldr.Calendar.Fiscal.US]>

iex> Cldr.Calendar.Interval.week 2019, 52, Cldr.Calendar.NRF
#DateRange<~D[2019-W52-1 Cldr.Calendar.NRF], ~D[2019-W52-7 Cldr.Calendar.NRF]>

iex> Cldr.Calendar.Interval.week 2019, 52, Cldr.Calendar.ISOWeek
#DateRange<~D[2019-W52-1 Cldr.Calendar.ISOWeek], ~D[2019-W52-7 Cldr.Calendar.ISOWeek]>

iex> Cldr.Calendar.Interval.week 2019, 52, Cldr.Calendar.Julian
{:error, :not_defined}
Link to this function

week(year, week, calendar \\ Cldr.Calendar.Gregorian)

View Source

Specs

Specs

year(Date.t()) :: Date.Range.t()

Returns a Date.Range.t that represents the year.

The range is enumerable.

Arguments

  • year is any year for calendar

  • calendar is any module that implements the Calendar and Cldr.Calendar behaviours. The default is Cldr.Calendar.Gregorian.

Returns

  • A Date.Range.t() representing the the enumerable days in the year

Examples

iex> Cldr.Calendar.Interval.year 2019, Cldr.Calendar.Fiscal.UK
#DateRange<~D[2019-01-01 Cldr.Calendar.Fiscal.UK], ~D[2019-12-31 Cldr.Calendar.Fiscal.UK]>

iex> Cldr.Calendar.Interval.year 2019, Cldr.Calendar.NRF
#DateRange<~D[2019-W01-1 Cldr.Calendar.NRF], ~D[2019-W52-7 Cldr.Calendar.NRF]>
Link to this function

year(year, calendar \\ Cldr.Calendar.Gregorian)

View Source

Specs