View Source Changelog

Note that ex_cldr_calendars version 1.21.1 and later are supported on Elixir 1.11 and later only.

Cldr.Calendars v1.23.1

This is the changelog for Cldr Calendars v1.23.1 released on March 1st, 2024. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Cldr.Calendar.plus/4 consistently applies a default for the :coerce option to Cldr.Calendar.plus/4 and Cldr.Calendar.minus/4. The default is true. Previously the default for plus/minus months was true but the default for years was false. Thanks to @linusdm for raising the issue.

  • Fix specs for Cldr.Calendar.localize/{1..3}. Thanks to @alappe for raising the issue. Closes #15.

Cldr.Calendars v1.23.0

This is the changelog for Cldr Calendars v1.23.0 released on December 16th, 2023. For older changelogs please consult the release tag on GitHub

Note that ex_cldr_calendars version 1.21.1 and later are supported on Elixir 1.11 and later only.

Breaking Change

  • Cldr.Calendar.weeks_in_year/1 now returns a tuple of the form {weeks_in_year, days_in_last_week} instead of an integer value. In particular for Gregorian based calendars, the value of weeks_in_year will be 53 and the value of days_last_week will be either 1 or 2 depending on whether it is a leap year or not.

Enhancements

  • Adds :week and :day to the options for <calendar>.plus/5. These are in addition to the already existing :year, :quarter and :month options. This addition is primarily to support tempo. This enhancement has no affect on the public API in the Cldr.Calendar module. The bump in minor release number is to allow for tempo to target the appropriate version in a semver compatible manner.

  • Adds Cldr.Calendar.ISO which is a month-based calendar with weeks that start on Monday and the first week must have at least 4 days of the current year in it. This aligns to the ISO8601 standard and is the month-based counterpart to the week-based Cldr.Calendar.ISOWeek calendar already included in ex_cldr_calendars.

Cldr.Calendars v1.22.1

This is the changelog for Cldr Calendars v1.22.1 released on July 4th 2023. For older changelogs please consult the release tag on GitHub

Note that ex_cldr_calendars version 1.21.1 and later are supported on Elixir 1.11 and later only.

Bug Fixes

  • Compatibility with the Calendar behaviour changes in Elixir 1.15.

Cldr.Calendars v1.22.0

This is the changelog for Cldr Calendars v1.22.0 released on April 28th 2023. For older changelogs please consult the release tag on GitHub

Note that ex_cldr_calendars version 1.21.1 and later are supported on Elixir 1.11 and later only.

Bug Fixes

  • Fixes localization of leap months which are used in lunisolar calendars.

Enhancements

  • Updates to ex_cldr version 2.37.0 which includes data from CLDR release 43

  • Supports configuring the :cldr_calendar_name for a calendar that is defined with the Cldr.Calendar.Base.{Month, Week} macros. The options can be :gregorian (the default) or :japanese. This change supports the new ex_cldr_calendars_japanese library.

Cldr Calendars v1.21.0

This is the changelog for Cldr Calendars v1.21.0 released on October 24th, 2022. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adds modified Julian days conversions. Thanks to @polvalente for the PR. Closes #14.

Cldr Calendars v1.20.0

This is the changelog for Cldr Calendars v1.20.0 released on September 21st, 2022. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v1.19.0

This is the changelog for Cldr Calendars v1.19.0 released on June 9th, 2022. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adds Cldr.Calendar.localize/{1,2} that converts a date into the calendar associated with the provided locale.

Cldr Calendars v1.18.1

This is the changelog for Cldr Calendars v1.18.1 released on June 5th, 2022. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • MyApp.Cldr.Calendar.calendar_from_locale/1 was added to the backend compiler module, not the backend module itself and therefore was not visible.

Cldr Calendars v1.18.0

This is the changelog for Cldr Calendars v1.18.0 released on February 21st, 2022. For older changelogs please consult the release tag on GitHub

Enhancements

  • Updates to ex_cldr version 2.26.0 and ex_cldr_numbers version 2.25.0 which use atoms for locale names and rbnf locale names. This is consistent with other elements of t:Cldr.LanguageTag where atoms are used when the cardinality of the data is fixed and relatively small and strings where the data is free format.

Cldr Calendars v1.17.3

This is the changelog for Cldr Calendars v1.17.3 released on January 31st, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix Kday.nth_kday/3 for when the kday is the same as the day of the week of the date.

Cldr Calendars v1.17.2

This is the changelog for Cldr Calendars v1.17.2 released on December 26th, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fixes Cldr.Calendar.FiscalYear.calendar_for/2. Thanks for @DaTrader for the report. Closes #10.

  • Use Cldr.Calendar.date_to_iso_days/1 in preference to Date.to_gregorian_days/1 since the latter is only available in Elixir 1.11 and later. Thanks to @DaTrader for the report. Closes #11.

Cldr Calendars v1.17.1

This is the changelog for Cldr Calendars v1.17.1 released on November 1st, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Ensure compatibility with Elixir 1.13 by marking the implementations of Calendar.year_of_era/1 as @impl true only on releases earlier than Elixir 1.13. In Elixir 1.13 the callback is Calendar.year_of_era/3.

Cldr Calendars v1.17.0

This is the changelog for Cldr Calendars v1.17.0 released on October 27th, 2021. For older changelogs please consult the release tag on GitHub

Enhancements

Bug Fixes

  • Fix day_of_week/{3, 4} to be compatible with Elixir 1.12 and also earlier versions - and ensure dialyzer passes on consuming applications.

Deprecations

Cldr Calendars v1.17.0-rc.3

This is the changelog for Cldr Calendars v1.17.0-rc.3 released on October 25th, 2021. For older changelogs please consult the release tag on GitHub

Deprecations

Cldr Calendars v1.17.0-rc.2

This is the changelog for Cldr Calendars v1.17.0-rc.2 released on October 25th, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix day_of_week/{3, 4} to be compatible with Elixir 1.12 and also earlier versions - and ensure dialyzer passes on consuming applications.

Cldr Calendars v1.17.0-rc.1

This is the changelog for Cldr Calendars v1.17.0-rc.1 released on October 25th, 2021. For older changelogs please consult the release tag on GitHub

Deprecations

  • Don't call deprecated Cldr.Config.get_locale/2, use Cldr.Locale.Loader.get_config/2 instead.

Cldr Calendars v1.17.0-rc.0

This is the changelog for Cldr Calendars v1.17.0-rc.0 released on October 3rd, 2021. For older changelogs please consult the release tag on GitHub

Enhancements

  • Add support for Chinese, Japanese and Korean lunisolar calendars.

  • Adds Cldr.Calendar.year_of_era/1 that supports eras that might change at any time during a calendar year. This is primarily applicable to the Japanese calendar.

  • Add Cldr.Calendar.Behaviour that can be used to factor out a lot of calendar boilerplate for many (but not all) calendar types.

  • Add year_of_era/3 as a callback in the Cldr.Calendar behaviour. This is required because at least one calendar (the Japanese) can change era on any day of the year.

Cldr Calendars v1.16.0

This is the changelog for Cldr Calendars v1.16.0 released on August 27th, 2021. For older changelogs please consult the release tag on GitHub

This release requires a minimum of Elixir 1.10 in line with supporting the current release and the two previous releases. Therefore Elixir 1.10, 1.11 and 1.12 are supported.

Bug Fixes

  • Do not require ex_cldr_numbers as a dependency.

Cldr Calendars v1.15.3

This is the changelog for Cldr Calendars v1.15.3 released on August 22nd, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fixes a case when Cldr.Calendar.Kday.kday_after/1 would return the same date, not the subsequent one.

Cldr Calendars v1.15.2

This is the changelog for Cldr Calendars v1.15.2 released on August 20th, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix doc errors. Thanks to @maennchen for the report. Doc errors in other ex_cldr packages are also updated.

Cldr Calendars v1.15.1

This is the changelog for Cldr Calendars v1.15.1 released on August 8th, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Add Code.ensure_loaded?(Date) when checking for whether we need to implement Date.day_of_week/3 or Date.day_of_week/4 since this changed from earlier Elixir versions.

Cldr Calendars v1.15.0

This is the changelog for Cldr Calendars v1.15.0 released on July 1st, 2021. For older changelogs please consult the release tag on GitHub

Enhancements

  • Updated to ex_cldr version 2.23.0 which has some changes to the valid territories list requiring a change in some tests. This normally wouldn't require a minor version change but doing so makes it easier to target this library as a dependency.

Cldr Calendars v1.14.1

This is the changelog for Cldr Calendars v1.14.1 released on May 17th, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix @impl warnings on Elixir 1.12

Cldr Calendars v1.14.0

This is the changelog for Cldr Calendars v1.14.0 released on April 13th, 2021. For older changelogs please consult the release tag on GitHub

Enhancements

  • Support creating time-base durations that are negative in direction. Date and DateTime durations must still be positive durations. For example:
    # Create a time-based duration that is negative in direction
    iex> {:ok, duration} = Cldr.Calendar.Duration.new ~T[10:00:00.0], ~T[09:00:00.0]
    {:ok,
    %Cldr.Calendar.Duration{
     day: 0,
     hour: -1,
     microsecond: 0,
     minute: 0,
     month: 0,
     second: 0,
     year: 0
    }}

Cldr Calendars v1.13.0

This is the changelog for Cldr Calendars v1.13.0 released on April 8th, 2021. For older changelogs please consult the release tag on GitHub

Enhancements

  • Fix creating durations from two Times.

  • Add support for CLDR 39 data release

Cldr Calendars v1.12.1

This is the changelog for Cldr Calendars v1.12.1 released on April 7th, 2021. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix a bug that prevented durations being created from times (as apposed to dates and datetimes)

Cldr Calendars v1.12.0

This is the changelog for Cldr Calendars v1.12.0 released on November 8th, 2020. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v1.11.0

This is the changelog for Cldr Calendars v1.11.0 released on November 1st, 2020. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v1.10.1

This is the changelog for Cldr Calendars v1.10.1 released on September 26th, 2020. For older changelogs please consult the release tag on GitHub

Bug Fixes

Cldr Calendars v1.10.0

This is the changelog for Cldr Calendars v1.10.0 released on August 29th, 2020. For older changelogs please consult the release tag on GitHub

Enhancements

  • Supports upcoming Elixir 1.11.0. The Calendar callback for day_of_week/3 has been changed to day_of_week/4 to allow for a different start day of week. Since Cldr Calendars already supports defining calendars with different start days of the week (ie other than Monday), the implementation only supports the :default parameter. Thanks to @lostkobrakai for the report. Closes Cldr Dates Times issue #17.

Cldr Calendars v1.9.0

This is the changelog for Cldr Calendars v1.9.0 released on June 7th, 2020. For older changelogs please consult the release tag on GitHub

Enhancements

Bug Fixes

  • More complete test coverage on durations with some additional corner case fixes

Cldr Calendars v1.8.1

This is the changelog for Cldr Calendars v1.8.1 released on June 4th, 2020. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix duration calculation when the year and month are the same and the day of the last date is greater than the day of the first date

Cldr Calendars v1.8.0

This is the changelog for Cldr Calendars v1.8.0 released on May 4th, 2020. For older changelogs please consult the release tag on GitHub

Breaking Change (that you might notice but probably won't)

  • The min_days_in_first_week for the calendar Cldr.Calendar.Gregorian is changed to be 1 rather than the previous value of 4. This only affects week-related processing for the calendar. The reason for the change is that the majority of territories have a preference for 1 for min_days_in_first_week so Cldr.Calendar.Gregorian more closely aligns to majority expectations.

Breaking changes (that you shouldn't notice)

  • The return result from Cldr.Calendar.new/3 may return {:module_already_exists, module}. It previously returned {:already_exists, module}

Bug Fixes

  • Use backend.get_locale/0 instead of Cldr.get_locale/0 for all options

  • Ensure that the default values for a locale's min_days and first_day_of_week are correctly applied in Cldr.Calendar.new/3. Any values passed as options take precedence over those defined for a locale.

Enhancements

Cldr Calendars v1.7.1

This is the changelog for Cldr Calendars v1.7.1 released on January 26th, 2020. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix doc link in MyApp.Cldr.Calendar.strftime_options!/2

Cldr Calendars v1.7.0

This is the changelog for Cldr Calendars v1.7.0 released on January 2nd, 2020. For older changelogs please consult the release tag on GitHub

Enhancements

  • Remove call to deprecated Code.ensure_compiled?/1 in Elixir 1.10

Cldr Calendars v1.6.0

This is the changelog for Cldr Calendars v1.6.0 released on December 9th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adds support for localizing Persian, Coptic and Ethiopic calendar localization. These calendars are published separately but they rely upon localization support from this package.

Cldr Calendars v1.5.1

This is the changelog for Cldr Calendars v1.5.1 released on November 10th, 2019. For older changelogs please consult the release tag on GitHub

Bug Fixes

Cldr Calendars v1.5.0

This is the changelog for Cldr Calendars v1.5.0 released on November 3rd, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adds MyApp.Cldr.Calendar.strftime_options!/2 to return a keyword list of options that can be applied to NimbleStrftime.format/3

Cldr Calendars v1.4.0

This is the changelog for Cldr Calendars v1.4.0 released on September 14th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adjusts <calendar>.add/3 to <calendar>.add/5 so that it takes individual date and time elements and not formal structs. This is consistent with other calendar behaviours.

Cldr Calendars v1.3.0

This is the changelog for Cldr Calendars v1.3.0 released on September 1st, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

Adds <calendar>.add/3 to add :quarter or :week to a naive datetime. This adds to the existing support for :year and :month.

Cldr Calendars v1.2.0

This is the changelog for Cldr Calendars v1.2.0 released on August 31st, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v1.1.0

This is the changelog for Cldr Calendars v1.1.0 released on August 30th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v1.0.0

This is the changelog for Cldr Calendars v1.0.0 released on June 16th, 2019. For older changelogs please consult the release tag on GitHub

Breaking changes

  • The format produced by inspecting a Date (or DateTime or NaiveDateTime) has changed. The parsing of dates in sigil_d (the ~d sigil) has also changed in order to facilitate roundtrip conversions. Previously a date would inspect as (using the NRF calendar) ~d[2019-W01-1]NRF. It now inspects as ~d[2019-W01-1 NRF]. The same approach is used for all calendars. See the examples in Cldr.Calendar.Sigils. This change is applicable to Elixir 1.10 and later.

  • The calendar configuration option :min_days has been renamed :min_days_in_first_week. The configuration option :day has been renamed to :day_of_week and the option :month has been renamed to :month_of_year. An exception will be raised if existing calendars are not updated.

  • An exception will be raised if a calendar is configured with an unknown option.

Enhancements

  • Implements inspect_date/4, inspect_datetime/11, inspect_naive_datetime/8 and inspect_time/5 for all Cldr.Calendar calendars. This implementation supports the revised Inspect protocol implementation for Date, Time, DateTime and NaiveDateTime structs. The purpose of that change is to allow customer calendars to be inspected. This change is applicable to Elixir 1.10 and later.

  • Adds Cldr.Calendar.week_of_month/1 and Cldr.Calendar callback week_of_month/4 to return the week of a month. The weeks are calculated on the basis of the calendar configuration. As a result, the week of the month, like the week of the year, may be in a different Gregorian year and month compared to the specified date.

  • Adds Cldr.Calendar.weeks_in_year/1 to return the number of weeks in a year.

  • Adds a calendar configuration where weeks start on the first day of the year. This configuration is valid only for :month based calendars. The configuration option day: :first triggers this behaviour. This configuration can result in the last week of the year being less than 7 days.

  • Adds Cldr.Calendar.inspect/2 that can be used as an :inspect_fun option in Inspect.Opts for Elixir version 1.9. It will not be required for Elixir 1.10 and later since this commit introduces inspect_* callbacks for Date, Time, DateTime and NaiveDateTime. An :inspect_fun can be configured in IEx by:

iex> IEx.configure(inspect: [inspect_fun: &Cldr.Calendar.inspect/2])
:ok

Bug Fixes

  • Ensure that Cldr.Calendar callbacks return a Calendar.ISO calendar if called with one (either as part of a date or as a separate argument).

  • Ensure the return calendar types of a an Interval are Calendar.ISO is the date provided is Calendar.ISO

  • Fix Cldr.Calendar.plus/4 for :months when the month wraps into the previous year(s)

  • Fix sigil_d to correctly parse ISO Week dates that have only a single digit day

Cldr Calendars v0.9.0

This is the changelog for Cldr Calendars v0.9.0 released on June 9th, 2019. For older changelogs please consult the release tag on GitHub

Breaking changes

  • Depends on Elixir 1.8 and above since it requires recent Calendar functionality.

Cldr Calendars v0.8.0

This is the changelog for Cldr v0.8.0 released on June 8th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v0.7.0

This is the changelog for Cldr Calendars v0.7.0 released on June 1st, 2019. For older changelogs please consult the release tag on GitHub

Breaking Changes

Enhancements

Cldr Calendars v0.6.0

This is the changelog for Cldr Calendars v0.6.0 released on April 28th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

Cldr Calendars v0.5.0

This is the changelog for Cldr Calendars v0.5.0 released on April 21th, 2019. For older changelogs please consult the release tag on GitHub

Breaking changes

  • Cldr.Calendar.localize/3 for :days_of_week now returns a list of 2-tuples that are of the format {day_of_week, day_name}.

Enhancements

  • Add Cldr.Calendar.localize/6 which localises numbers as part of a date without parameter checking. This is considered a private implementation for now.

Cldr Calendars v0.4.1

This is the changelog for Cldr Calendars v0.4.1 released on April 19th, 2019. For older changelogs please consult the release tag on GitHub

Bug Fixes

  • Fix calculation of days_in_month for the last month in long year of a week-based calendar

Cldr Calendars v0.4.0

This is the changelog for Cldr Calendars v0.4.0 released on April 19th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adds Cldr.Calendar.interval_stream/3 which returns a stream function that when enumerated generates a list of dates with a specified precision of either :years, :quarters, :months, :weeks or :days. This function has the same arguments and generates the same results as Cldr.Calendar.interval/3 except it generates the results lazily.

  • Adds :days_of_week option to Cldr.Calendar.localize/3 which returns a list of the localized names of the days of the week in calendar order.

  • Adds calendar_base/0 to identify whether the calendar is week or month based.

Bug Fixes

Cldr Calendars v0.3.0

This is the changelog for Cldr Calendars v0.3.0 released on April 16th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

  • Adds Cldr.Calendar.interval/3 which generates an enumerable list of dates with a specified precision of either :years, :quarters, :months, :weeks or :days.

Examples:

iex> import Cldr.Calendar.Sigils
Cldr.Calendar.Sigils

iex> d = ~d[2019-01-31]
%Date{calendar: Cldr.Calendar.Gregorian, day: 31, month: 1, year: 2019}

iex> d2 = ~d[2019-05-31]
%Date{calendar: Cldr.Calendar.Gregorian, day: 31, month: 5, year: 2019}

iex> Cldr.Calendar.interval d, 3, :months
[
  %Date{calendar: Cldr.Calendar.Gregorian, day: 28, month: 2, year: 2019},
  %Date{calendar: Cldr.Calendar.Gregorian, day: 31, month: 3, year: 2019},
  %Date{calendar: Cldr.Calendar.Gregorian, day: 30, month: 4, year: 2019}
]

iex> Cldr.Calendar.interval d, d2, :months
[
  %Date{calendar: Cldr.Calendar.Gregorian, day: 31, month: 1, year: 2019},
  %Date{calendar: Cldr.Calendar.Gregorian, day: 28, month: 2, year: 2019},
  %Date{calendar: Cldr.Calendar.Gregorian, day: 31, month: 3, year: 2019},
  %Date{calendar: Cldr.Calendar.Gregorian, day: 30, month: 4, year: 2019},
  %Date{calendar: Cldr.Calendar.Gregorian, day: 31, month: 5, year: 2019}
]

Cldr Calendars v0.2.0

This is the changelog for Cldr Calendars v0.2.0 released on April 14th, 2019. For older changelogs please consult the release tag on GitHub

Breaking Changes

  • All calendars now return {year, month, day} tuples from date_from_iso_days/1. Previously in some cases they returned a Date.t

  • first_day_of_year/1 and last_day_of_year/1, first_gregorian_day_of_year/1 and last_gregorian_day_of_year/1 now all return a Date.t or an error tuple. Previously the returned result types were inconsistent.

  • Remove first_gregorian_day_of_year/1 and last_gregorian_day_of_year/1 from Cldr.Calendar callbacks.

Enhancements

  • Adds Cldr.Calendar.Julian implementing the Julian calendar. This calendar does not implement week/2, week_of_year/3 or iso_week_of_year/3.

Bug Fixes

  • Fixes calculating negative offsets for months in a week-based calendar. Thanks to @bglusman. Closes #2.

Cldr Calendars v0.1.0

This is the changelog for Cldr Calendars v0.1.0 released on April 5th, 2019. For older changelogs please consult the release tag on GitHub

Enhancements

  • Initial release. See the README for a description of this project.