Kday (Kday v1.0.0) View Source

Functions to return the date of the first, last or nth day of the week on, nearest, before or after a given date.

Link to this section Summary

Functions

Return the date of the first day_of_week on or after the specified date.

Returns the day of the week for a given iso_day_number

Return the date of the day_of_week after the specified date.

Return the date of the day_of_week before the specified date.

Return the date of the day_of_week nearest the specified date.

Return the date of the day_of_week on or after the specified date.

Return the date of the day_of_week on or before the specified date.

Return the date of the last day_of_week on or before the specified date.

Return the date of the nth day_of_week on or before/after the specified date.

Returns the number of days in n weeks

Link to this section Functions

Specs

Return the date of the first day_of_week on or after the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or ISO days since epoch.

  • k is an integer day of the week.

Returns

  • A %Date{”} in the calendar of the date provided as an argument

Examples

# US election day
iex> Kday.first_kday(~D[2017-11-02], 2)
~D[2017-11-07]

# US Daylight savings end
iex> Kday.first_kday(~D[2017-11-01], 7)
~D[2017-11-05]
Link to this function

iso_days_to_day_of_week(iso_day_number)

View Source

Specs

iso_days_to_day_of_week(integer()) :: Calendar.day_of_week()

Returns the day of the week for a given iso_day_number

Arguments

  • iso_day_number is the number of days since the start of the epoch.

Returns

  • An integer representing a day of the week where Monday is represented by 1 and Sunday is represented by 7

Examples

iex> days = Date.to_gregorian_days ~D[2019-01-01]
iex> Kday.iso_days_to_day_of_week(days) == 2
true

Specs

Return the date of the day_of_week after the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or ISO days since epoch.

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Examples

iex> Kday.kday_after(~D[2016-02-29], 2)
~D[2016-03-01]

iex> Kday.kday_after(~D[2017-11-30], 1)
~D[2017-12-04]

iex> Kday.kday_after(~D[2017-06-30], 6)
~D[2017-07-01]

iex> Kday.kday_after(~D[2021-03-28], 7)
~D[2021-04-04]

Specs

Return the date of the day_of_week before the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or a Rata Die

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Examples

iex> Kday.kday_before(~D[2016-02-29], 2)
~D[2016-02-23]

iex> Kday.kday_before(~D[2017-11-30], 1)
~D[2017-11-27]

# 6 means Saturday.  Use either the integer value or the atom form.
iex> Kday.kday_before(~D[2017-06-30], 6)
~D[2017-06-24]

Specs

kday_nearest(Calendar.day() | Date.t(), Calendar.day_of_week()) ::
  Calendar.day() | Date.t()

Return the date of the day_of_week nearest the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or a Rata Die

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Examples

iex> Kday.kday_nearest(~D[2016-02-29], 2)
~D[2016-03-01]

iex> Kday.kday_nearest(~D[2017-11-30], 1)
~D[2017-11-27]

iex> Kday.kday_nearest(~D[2017-06-30], 6)
~D[2017-07-01]
Link to this function

kday_on_or_after(date, k)

View Source

Specs

kday_on_or_after(Calendar.day() | Date.t(), Calendar.day_of_week()) ::
  Calendar.day() | Date.t()

Return the date of the day_of_week on or after the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or a Rata Die

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Examples

iex> Kday.kday_on_or_after(~D[2016-02-29], 2)
~D[2016-03-01]

iex> Kday.kday_on_or_after(~D[2017-11-30], 1)
~D[2017-12-04]

iex> Kday.kday_on_or_after(~D[2017-06-30], 6)
~D[2017-07-01]
Link to this function

kday_on_or_before(date, k)

View Source

Specs

kday_on_or_before(Calendar.day() | Date.t(), Calendar.day_of_week()) ::
  Calendar.day() | Date.t()

Return the date of the day_of_week on or before the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or a Rata Die

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Examples

iex> Kday.kday_on_or_before(~D[2016-02-29], 2)
~D[2016-02-23]

iex> Kday.kday_on_or_before(~D[2017-11-30], 1)
~D[2017-11-27]

iex> Kday.kday_on_or_before(~D[2017-06-30], 6)
~D[2017-06-24]

Specs

Return the date of the last day_of_week on or before the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or ISO days since epoch.

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Example

# Memorial Day in the US
iex> Kday.last_kday(~D[2017-05-31], 1)
~D[2017-05-29]

Specs

Return the date of the nth day_of_week on or before/after the specified date.

Arguments

  • date is %Date{}, a %DateTime{}, %NaiveDateTime{} or ISO days since epoch.

  • n is the cardinal number of k before (negative n) or after (positive n) the specified date

  • k is an integer day of the week.

Returns

  • A %Date{} in the calendar of the date provided as an argument

Examples

# Thanksgiving in the US
iex> Kday.nth_kday(~D[2017-11-01], 4, 4)
~D[2017-11-23]

# Labor day in the US
iex> Kday.nth_kday(~D[2017-09-01], 1, 1)
~D[2017-09-04]

# Daylight savings time starts in the US
iex> Kday.nth_kday(~D[2017-03-01], 2, 7)
~D[2017-03-12]

Specs

weeks_to_days(integer()) :: integer()

Returns the number of days in n weeks

Example

iex> Kday.weeks_to_days(2)
14