date-fns
Version:
Modern JavaScript date utility library
893 lines (657 loc) β’ 86.6 kB
Markdown
# Change Log
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning].
This change log follows the format documented in [Keep a CHANGELOG].
[semantic versioning]: http://semver.org/
[keep a changelog]: http://keepachangelog.com/
## [2.17.0] - 2021-02-05
Kudos to [@shaykav](https://github.com/date-fns/date-fns/pull/1952), [@davidgape89](https://github.com/davidgape89), [@rikkalo](https://github.com/rikkalo), [@tan75](https://github.com/tan75), [@talgautb](https://github.com/talgautb), [@owenl131](https://github.com/owenl131), [@kylesezhi](https://github.com/kylesezhi), [@inigoiparragirre](https://github.com/inigoiparragirre), [@gius](https://github.com/gius), [@Endeauvirr](https://github.com/Endeauvirr) and [@frankyston](https://github.com/frankyston).
### Fixed
- [Fixed Russian locale parsing issue](https://github.com/date-fns/date-fns/pull/1950).
- [Fixed `differenceInMonths` for edge cases, such as the end of February dates](https://github.com/date-fns/date-fns/pull/2185).
- [Fixed suffixes for the Kazakh locale](https://github.com/date-fns/date-fns/pull/2010).
- [Fixed `formatDuration` week translation in `pt` and `pt-BR` locales](https://github.com/date-fns/date-fns/pull/2125).
- [Made Japanese locale to use the correct value for the start of the week](https://github.com/date-fns/date-fns/pull/2099).
- [Adjusted date formats in the Basque locale](https://github.com/date-fns/date-fns/pull/2080).
- [Fixed the short and medium date formats in the Czech locale](https://github.com/date-fns/date-fns/pull/2111).
- [Adjusted the Polish translations of `formatDistance`](https://github.com/date-fns/date-fns/pull/2187).
- [Fixed the week's abbreviations in the Brazilian Portuguese](https://github.com/date-fns/date-fns/pull/2170).
### Added
- [Added `intlFormat`](https://github.com/date-fns/date-fns/pull/2172) a lightweight formatting function that uses [Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl). Eventually, it will become the default formatting function, so it's highly recommended for new code.
- [Added `en-ZA` locale](https://github.com/date-fns/date-fns/pull/1952).
- [Added an ability to format lowercase am/pm with `aaa` and `bbb` tokens](https://github.com/date-fns/date-fns/pull/2016).
- [Added ordinal formatting for Japanese year values](https://github.com/date-fns/date-fns/pull/2177/files).
## [2.16.1] - 2020-07-31
Kudos to [@aleksaps](https://github.com/aleksaps), [@leedriscoll](https://github.com/leedriscoll) and [@BanForFun](https://github.com/BanForFun) for pull-requests!
### Fixed
- [Fixed a typo in Scottish Gaelic (gd) locale](https://github.com/date-fns/date-fns/pull/1925).
- [Fixed typos in Serbian Latin locale](https://github.com/date-fns/date-fns/pull/1928).
- [Fixed greek grammar for Saturday on `formatRelative`](https://github.com/date-fns/date-fns/pull/1930).
- Removed locale snapshots from the npm package making it lighter.
## [2.16.0] - 2020-08-27
Kudos to [@jvpelt](https://github.com/jvpelt), [@piotrl](https://github.com/piotrl), [@yotamofek](https://github.com/yotamofek), [@dwaxweiler](https://github.com/dwaxweiler), [@leedriscoll](https://github.com/leedriscoll) and [@bradevans](https://github.com/bradevans) for working on the release. Also thanks to [@PascalHonegger](https://github.com/PascalHonegger), [@pickfire](https://github.com/pickfire), [@TheJaredWilcurt](https://github.com/TheJaredWilcurt), [@SidKH](https://github.com/SidKH) and [@nfantone](https://github.com/nfantone) for improving the documentation.
### Fixed
- [Added correct translations for Welsh `1 minute` and `2 days`](https://github.com/date-fns/date-fns/pull/1903).
- [Fixed `formatRFC3339` formatting timezone offset with minutes](https://github.com/date-fns/date-fns/pull/1890).
- [Added missing locale type definition for `formatDuration`](https://github.com/date-fns/date-fns/pull/1881)
- [Fixed Scottish Gaelic locale issues](https://github.com/date-fns/date-fns/pull/1914).
### Changed
- [Used shorter Hebrew alternative for "about"](https://github.com/date-fns/date-fns/pull/1893).
- [Improved string arguments warning after upgrading to v2](https://github.com/date-fns/date-fns/pull/1910).
### Added
- [Added Luxembourgish (lb) locale](https://github.com/date-fns/date-fns/pull/1900).
## [2.15.0] - 2020-07-17
Thanks to [@belgamo](https://github.com/belgamo), [@Matsuuu](https://github.com/Matsuuu), [@Imballinst](https://github.com/Imballinst), [@arsnyder16](https://github.com/arsnyder16), [@pankajupadhyay29](https://github.com/pankajupadhyay29), [@DCBN](https://github.com/DCBN), [@leedriscoll](https://github.com/leedriscoll), [@gottsohn](https://github.com/gottsohn), [@mukuljainx](https://github.com/mukuljainx) and [@dtriana](https://github.com/dtriana) for working on the release. Also kudos to [@KidkArolis](https://github.com/KidkArolis), [@imgx64](https://github.com/imgx64), [@fjc0k](https://github.com/fjc0k), [@wmonk](https://github.com/wmonk), [@djD-REK](https://github.com/djD-REK), [@dandv](https://github.com/dandv), [@psimk](https://github.com/psimk) and [@brimworks](https://github.com/brimworks) for improving the documentation.
### Fixed
- [Fixed behavior of `addBusinessDays` when input date is a weekend day](https://github.com/date-fns/date-fns/pull/1790).
- [Fixed `parseISO` not returning `Invalid Date` on incorrect string when there are spaces in it](https://github.com/date-fns/date-fns/pull/1791).
- [Fixed `es` round-tripping dates with Wednesday](https://github.com/date-fns/date-fns/pull/1792).
- [Fixed round-trip bug with `d`/`EEEE` ordering in tokens like `PPPPP`](https://github.com/date-fns/date-fns/pull/1795).
- [Fixed issues with parsing values in Japanese](https://github.com/date-fns/date-fns/pull/1807).
- [Fixed Hungarian breaking IE11](https://github.com/date-fns/date-fns/pull/1842).
- [Fixed Spanish accents in Saturday and Wednesday](https://github.com/date-fns/date-fns/pull/1872).
### Changed
- [Improved the message of protected tokens error](https://github.com/date-fns/date-fns/pull/1641).
### Added
- [Added Swiss-French `fr-CH` locale](https://github.com/date-fns/date-fns/pull/1809).
- [Added Flemish `nl-BE` locale](https://github.com/date-fns/date-fns/pull/1812).
- [Added Scottish Gaelic `gd` locale](https://github.com/date-fns/date-fns/pull/1832).
- [Added New Zealand English `en-NZ` locale](https://github.com/date-fns/date-fns/pull/1835).
- [Added `isMatch` function](https://github.com/date-fns/date-fns/pull/1868).
## [2.14.0] - 2020-05-18
Kudos to [@julamb](https://github.com/julamb), [@JacobSoderblom](https://github.com/JacobSoderblom), [@justingrant](http://github.com/justingrant), [@dragunoff](https://github.com/dragunoff), [@jmate0321](https://github.com/jmate0321), [@gbhasha](https://github.com/gbhasha), [@rasck](https://github.com/rasck), [@AlbertoPdRF](https://github.com/AlbertoPdRF), [@sebastianhaberey](https://github.com/sebastianhaberey) and [@giogonzo](https://github.com/giogonzo) for working on the release!
### Fixed
- [Fixed DST issues with `add`, `addDays` and `addMonths`](https://github.com/date-fns/date-fns/pull/1760).
- [Fixed "quarter" translation in the Bulgarian locale](https://github.com/date-fns/date-fns/pull/1763).
- [Fixed `formatDistance` strings in the Hungarian locale](https://github.com/date-fns/date-fns/pull/1765).
- [Fixed Danish month abbreviations](https://github.com/date-fns/date-fns/pull/1774).
- [Fixed parsing of mei in the Dutch locale](https://github.com/date-fns/date-fns/pull/1774).
- [Fixed missing preposition in `formatLong` in the Spanish locale](https://github.com/date-fns/date-fns/pull/1775).
- [Fixed `formatRelative` in the Italian locale](https://github.com/date-fns/date-fns/pull/1777).
### Added
- [Added `eachQuarterOfInterval`](https://github.com/date-fns/date-fns/pull/1715).
- [Added Basque (`eu`) locale](https://github.com/date-fns/date-fns/pull/1759).
- [Added Indian English (`en-IN`) locale](https://github.com/date-fns/date-fns/pull/1767).
- [Added `eachHourOfInterval`](https://github.com/date-fns/date-fns/pull/1776).
## [2.13.0] - 2020-05-06
Thanks to [@JorenVos](https://github.com/JorenVos), [@developergouli](https://github.com/developergouli), [@rhlowe](https://github.com/rhlowe) and [@justingrant](http://github.com/justingrant) for working on the release!
### Fixed
- [Fixed mei abbreviation in the Dutch locale](https://github.com/date-fns/date-fns/pull/1752).
- [Fixed `differenceInDays` DST behavior broken in 2.12.0](https://github.com/date-fns/date-fns/pull/1754).
### Added
- [Added Kannada locale support](https://github.com/date-fns/date-fns/pull/1747).
- [Added `formatISODuration` function](https://github.com/date-fns/date-fns/pull/1713).
- [Added `intervalToDuration` function](https://github.com/date-fns/date-fns/pull/1713).
## [2.12.0] - 2020-04-09
Kudos to [@leshakoss](http://github.com/leshakoss), [@skyuplam](https://github.com/skyuplam), [@so99ynoodles](https://github.com/so99ynoodles), [@dkozickis](https://github.com/dkozickis), [@belgamo](https://github.com/belgamo), [@akgondber](https://github.com/akgondber), [@dcousens](https://github.com/dcousens) and [@BoomDev](https://github.com/BoomDev) for working on the release!
### Fixed
- [Fixed minulΓ½ Ε‘tvrtok in Slovak locale](https://github.com/date-fns/date-fns/pull/1701).
- Fixed date ordinalNumber for [ja/zh-CN/zh-TW](https://github.com/date-fns/date-fns/pull/1690) and [ko](https://github.com/date-fns/date-fns/pull/1696).
- [Fixed quarters parsing](https://github.com/date-fns/date-fns/pull/1694).
- [Fixed `setDay` with `weekStartsOn` != 0](https://github.com/date-fns/date-fns/pull/1639).
- [Fixed differenceInDays across DST](https://github.com/date-fns/date-fns/pull/1630).
- [Fixed required arguments exception message](https://github.com/date-fns/date-fns/pull/1674).
### Added
- [Added new function `formatDistanceToNowStrict`](https://github.com/date-fns/date-fns/pull/1679).
## [2.11.1] - 2020-03-26
### Fixed
- Rebuilt TypeScript and flow types.
## [2.11.0] - 2020-03-13
Kudos to [@oakhan3](https://github.com/oakhan3), [@Mukhammadali](https://github.com/Mukhammadali), [@altrim](https://github.com/altrim), [@leepowellcouk](https://github.com/leepowellcouk), [@amatzon](@https://github.com/amatzon), [@bryanMt](https://github.com/bryanMt), [@kalekseev](https://github.com/kalekseev), [@eugene-platov](https://github.com/eugene-platov) and [@tjrobinson](https://github.com/tjrobinson) for working on the release.
### Fixed
- [Fixed a bug in `differenceInYears` causing incorrect results when the left date is a leap day](https://github.com/date-fns/date-fns/pull/1654).
- [Fixed `parseISO` to work correctly around time shift dates](https://github.com/date-fns/date-fns/pull/1667).
- [Fixed `format` to work correctly with GMT-0752/GMT-0456 and similar timezones](https://github.com/date-fns/date-fns/pull/1666).
### Changed
- [Changed `getDay` typings to return `0|1|2|3|4|5|6` instead of `number`](https://github.com/date-fns/date-fns/pull/1668).
- [Improved Chinese locale](https://github.com/date-fns/date-fns/pull/1664):
- Change date format to meet the national standard (GB/T 7408-2005).
- Improve `ordinalNumber` function behavior.
- Add prefix in `formatRelative` depending on if it's a current week or not.
### Added
- [Added Uzbek `uz` locale](https://github.com/date-fns/date-fns/pull/1648).
- [Updated Macedonian locale for v2](https://github.com/date-fns/date-fns/pull/1649).
- [Added Maltese `mt` locale](https://github.com/date-fns/date-fns/pull/1658).
## [2.10.0] - 2020-02-25
### Fixed
- [Fixed `formatISO` when formatting time with timezones with minute offsets > 0](https://github.com/date-fns/date-fns/pull/1599). Kudos to [@dcRUSTy](https://github.com/dcRUSTy).
### Fixed
- Fixed a bug in setDay when using weekStartsOn that is not 0
### Added
- [Added `weeks` to `Duration`](https://github.com/date-fns/date-fns/pull/1592).
- [Added `weeks` support to `add` and `sub`](https://github.com/date-fns/date-fns/pull/1592).
- [Added details message in `throwProtectedError`](https://github.com/date-fns/date-fns/pull/1592).
## [2.9.0] - 2020-01-08
Thanks to [@mborgbrant](https://github.com/mborgbrant), [@saintplay](https://github.com/saintplay), [@mrenty](https://github.com/mrenty), [@kibertoad](https://github.com/kibertoad), [@levibuzolic](https://github.com/levibuzolic), [@Anshuman71](https://github.com/Anshuman71), [@talgautb](https://github.com/talgautb), [@filipjuza](https://github.com/filipjuza), [@tobyzerner](https://github.com/tobyzerner), [@emil9453](https://github.com/emil9453), [@fintara](https://github.com/fintara), [@pascaliske](https://github.com/pascaliske), [@rramiachraf](https://github.com/rramiachraf), [@marnusw](https://github.com/marnusw) and [@Imballinst](https://github.com/Imballinst) for working on the release.
### Fixed
- [Fixed a bug with addBusinessDays returning the Tuesday when adding 1 day on weekends. Now it returns the Monday](https://github.com/date-fns/date-fns/pull/1588).
- [Added missing timezone to `formatISO`](https://github.com/date-fns/date-fns/pull/1576).
- [Removed dots from short day period names in the Kazakh locale](https://github.com/date-fns/date-fns/pull/1512).
- [Fixed typo in formatDistance in the Czech locale](https://github.com/date-fns/date-fns/pull/1540).
- [Fixed shortenings in the Bulgarian locale](https://github.com/date-fns/date-fns/pull/1560).
- [Fixed regex for the May in the Portuguese locale](https://github.com/date-fns/date-fns/pull/1565).
### Added
- [Added `eachMonthOfInterval` and `eachYearOfInterval`](https://github.com/date-fns/date-fns/pull/618).
- [Added `inclusive` option to `areIntervalsOverlapping](https://github.com/date-fns/date-fns/pull/643).
- [Added `isExists` function that checks if the given date is exists](https://github.com/date-fns/date-fns/pull/682).
- [Added `add` function to add seconds, minutes, hours, weeks, years in single call](https://github.com/date-fns/date-fns/pull/1581).
- [Added `sub` function, the opposite of `add`](https://github.com/date-fns/date-fns/pull/1583).
- [Added `Duration` type used in `add` and `sub`](https://github.com/date-fns/date-fns/pull/1583).
- [Added Azerbaijani (az) locale](https://github.com/date-fns/date-fns/pull/1547).
- [Added Moroccan Arabic (ar-MA) locale](https://github.com/date-fns/date-fns/pull/1578).
### Changed
- [Reduced the total minified build size by 1Kb/4%](https://github.com/date-fns/date-fns/pull/1563).
- [Made all properties in `Locale` type optional](https://github.com/date-fns/date-fns/pull/1542).
- [Added missing properties to `Locale` type](https://github.com/date-fns/date-fns/pull/1542).
- [Add the locale code to `Locale` type](https://github.com/date-fns/date-fns/pull/1580).
- [Added support of space time separator to `parseJSON`](https://github.com/date-fns/date-fns/pull/1579).
- [Allowed up to 7 digits in milliseconds in `parseJSON`](https://github.com/date-fns/date-fns/pull/1579).
## [2.8.1] - 2019-11-22
Thanks to [@Imballinst](https://github.com/Imballinst) for the bug fix!
### Fixed
- [Add colon between the hour and minutes for `formatRFC3339`](https://github.com/date-fns/date-fns/pull/1549). [See #1548](https://github.com/date-fns/date-fns/issues/1548).
## [2.8.0] - 2019-11-19
Kudos to [@NaridaL](https://github.com/NaridaL), [@Zyten](https://github.com/Zyten), [@Imballinst](https://github.com/Imballinst), [@leshakoss](https://github.com/leshakoss) and [@Neorth](https://github.com/Neorth) for working on the release.
### Fixed
- [Remove the next week preposition in the Swedish locale](https://github.com/date-fns/date-fns/pull/1538).
### Added
- [Added Malay (ms) locale](https://github.com/date-fns/date-fns/pull/1537).
- [Added `formatISO`, `formatISO9075`, `formatRFC3339`, and `formatRFC7231` functions](https://github.com/date-fns/date-fns/pull/1536).
## [2.7.0] - 2019-11-07
Thanks to [@mzgajner](https://github.com/mzgajner), [@NaridaL](https://github.com/NaridaL), [@Zyten](https://github.com/Zyten), [@leshakoss](https://github.com/leshakoss), [@fintara](https://github.com/fintara), [@kpr-hellofresh](https://github.com/kpr-hellofresh) for contributing to the release.
### Fixed
- [Fixed a mistake in the Slovenian locale](https://github.com/date-fns/date-fns/pull/1529).
- [Fixed incorrect behavior of `parseISO` in Firefox caused by differences in `getTimezoneOffset`](https://github.com/date-fns/date-fns/pull/1495).
### Changed
- [Make object arguments types more elaborate in Flow type definitions](https://github.com/date-fns/date-fns/pull/1519).
- [Get rid of deprecated Function in Flow type definitions](https://github.com/date-fns/date-fns/pull/1520).
- [Allow `parseJSON` to accept strings without trailing 'Z' symbol and with up to 6 digits in the milliseconds' field](https://github.com/date-fns/date-fns/pull/1499).
### Added
- [Added Bulgarian (bg) locale](https://github.com/date-fns/date-fns/pull/1522).
## [2.6.0] - 2019-10-22
Kudos to [@marnusw](https://github.com/marnusw), [@cdrikd](https://github.com/cdrikd) and [@rogyvoje](https://github.com/rogyvoje) for working on the release!
### Added
- [Added `parseJSON` - lightweight function (just 411 B) that parses dates formatted with `toJSON`](https://github.com/date-fns/date-fns/pull/1463).
- [Added the language code to each locale](https://github.com/date-fns/date-fns/pull/1489).
- [Added `subBusinessDays` function](https://github.com/date-fns/date-fns/pull/1491).
- [Added both Serbian - cyrillic (sr) and latin (sr-Latn) locales](https://github.com/date-fns/date-fns/pull/1494).
## [2.5.1] - 2019-10-18
Thanks to [@mitchellbutler](https://github.com/mitchellbutler) for the bug fix!
### Fixed
- [Fixed infinite loop in `addBusinessDays`](https://github.com/date-fns/date-fns/pull/1486).
## [2.5.0] - 2019-10-16
Kudos to [@dkozickis](https://github.com/dkozickis), [@drugoi](https://github.com/drugoi), [@kranthilakum](https://github.com/kranthilakum), [@102](https://github.com/102), [@gpetrioli](https://github.com/gpetrioli) and [@JulienMalige](https://github.com/JulienMalige) for making the release happen.
### Fixed
- [Fixed compatibility with IE11 by removing `findIndex` from the code](https://github.com/date-fns/date-fns/pull/1457).
- [Fixed Greek locale patterns](https://github.com/date-fns/date-fns/pull/1480).
### Added
- [Added Kazakh (kk) locale](https://github.com/date-fns/date-fns/pull/1460).
- [Added Telugu (te) locale](https://github.com/date-fns/date-fns/pull/1464).
- [Added Canadian French (fr-CA) locale](https://github.com/date-fns/date-fns/issues/1465).
- [Added Australian English (en-AU) locale](https://github.com/date-fns/date-fns/pull/1470).
- [Exported `Interval` and `Locale` types from Flow typings](https://github.com/date-fns/date-fns/pull/1475).
## [2.4.1] - 2019-09-28
Thanks to [@mrclayman](https://github.com/mrclayman) for reporting the issue and [@leshakoss](https://github.com/leshakoss) for fixing it.
### Fixed
- [Fixed am/pm mixup in the Czech locale](https://github.com/date-fns/date-fns/pull/1453).
## [2.4.0] - 2019-09-27
This release brought to you by these amazing people: [@lovelovedokidoki](https://github.com/lovelovedokidoki), [@alexigityan](https://github.com/alexigityan), [@kalekseev](https://github.com/kalekseev) and [@andybangs](https://github.com/andybangs). You rock!
### Fixed
- [Fixed Vietnamese parsing patterns](https://github.com/date-fns/date-fns/pull/1445).
- [Fixed Czech parsing regexes](https://github.com/date-fns/date-fns/pull/1446).
- [Fixed offset for Eastern Hemisphere in `parseISO`](https://github.com/date-fns/date-fns/pull/1450).
### Added
- [Added Armenian locale support](https://github.com/date-fns/date-fns/pull/1448).
## [2.3.0] - 2019-09-24
Huge thanks to [@lovelovedokidoki](https://github.com/lovelovedokidoki) who improved 8 (!) locales in an unstoppable open-source rampage and [@VesterDe](https://github.com/VesterDe) for fixing Slovenian locale π
### Fixed
- [Fixed the translation of "yesterday" in the Slovenian locale](https://github.com/date-fns/date-fns/pull/1420).
- [Fixed French parsing issues with June and August](https://github.com/date-fns/date-fns/pull/1430).
- [Improved Turkish parsing](https://github.com/date-fns/date-fns/pull/1432).
- [Fixed "March" in Dutch parsing patterns](https://github.com/date-fns/date-fns/pull/1433).
- [Fixed Hindi parsing patterns](https://github.com/date-fns/date-fns/pull/1434).
### Added
- [Added Finnish matching patterns](https://github.com/date-fns/date-fns/pull/1425).
- [Accept abbreviated March, June, July in Norwegian locales](https://github.com/date-fns/date-fns/pull/1431).
- [Added parsing for Greek months with long formatting](https://github.com/date-fns/date-fns/pull/1435).
## [2.2.1] - 2019-09-12
Kudos to date-fns contributors: [@mzgajner](https://github.com/mzgajner), [@sibiraj-s](https://github.com/sibiraj-s), [@mukeshmandiwal](https://github.com/mukeshmandiwal), [@SneakyFish5](https://github.com/SneakyFish5) and [@CarterLi](https://github.com/CarterLi).
### Added
- [Added new `set` function](https://github.com/date-fns/date-fns/pull/1398).
- [Updated Slovenian (sl) locale for v2](https://github.com/date-fns/date-fns/pull/1418).
- [Added Tamil (ta) locale](https://github.com/date-fns/date-fns/pull/1411).
- [Added Hindi (hi) locale](https://github.com/date-fns/date-fns/pull/1409).
- [Added support of `\n` in `format`, `lightFormat` and `parse`](https://github.com/date-fns/date-fns/pull/1417).
## [2.1.0] - 2019-09-06
Thanks to date-fns contributors: [@ManadayM](https://github.com/ManadayM), [@illuminist](https://github.com/illuminist), [@visualfanatic](https://github.com/visualfanatic), [@vsaarinen](https://github.com/vsaarinen) and at least but not least [@leshakoss](https://github.com/leshakoss)!
### Fixed
- [Set start of the week to the Sunday for Thai locale](https://github.com/date-fns/date-fns/pull/1402).
- [Fixed month matching in Polish locale](https://github.com/date-fns/date-fns/pull/1404).
- [Fixed `eachWeekendOfInterval` skipping the first date in the supplied interval](https://github.com/date-fns/date-fns/pull/1407).
### Added
- [Added Gujarati locale](https://github.com/date-fns/date-fns/pull/1400).
## [2.0.1] - 2019-08-23
### Fixed
- [Fix](https://github.com/date-fns/date-fns/pull/1046) `getWeekOfMonth` with `options.weekStartsOn` set to 1 [not working for Sundays](https://github.com/date-fns/date-fns/issues/1040). Kudos to [@waseemahmad31](https://github.com/waseemahmad31)!
## [2.0.0] - 2019-08-20
If you're upgrading from v2 alpha or beta, [see the pre-release changelog](https://gist.github.com/kossnocorp/a307a464760b405bb78ef5020a4ab136).
### Fixed
- Fix the `toDate` bug occurring when parsing ISO-8601 style dates (but not valid ISO format)
with a trailing Z (e.g `2012-01Z`), it returned Invalid Date for FireFox/IE11 [#510](https://github.com/date-fns/date-fns/issue/510)
- Fix `differenceIn...` functions returning negative zero in some cases:
[#692](https://github.com/date-fns/date-fns/issues/692)
- `isDate` now works properly with dates passed across iframes [#754](https://github.com/date-fns/date-fns/pull/754).
- Fix a few bugs that appear in timezones with offsets that include seconds (e.g. GMT+00:57:44).
See PR [#789](https://github.com/date-fns/date-fns/pull/789).
- [Fixed DST issue](https://github.com/date-fns/date-fns/pull/1003). See [#972](https://github.com/date-fns/date-fns/issues/972) and [#992](https://github.com/date-fns/date-fns/issues/992) for more details.
- Fixed DST issue in `eachDayOfInterval` that caused time in the days
after DST change to have the shift as well.
- Fix bug in Galician locale caused by incorrect usage of `getHours`
instead of `getUTCHours`.
### Changed
- **BREAKING**: now functions don't accept string arguments, but only
numbers or dates. When a string is passed, it will result in
an unexpected result (`Invalid Date`, `NaN`, etc).
From now on a string should be parsed using `parseISO` (ISO 8601)
or `parse`.
In v1 we've used `new Date()` to parse strings, but it resulted in many
hard-to-track bugs caused by inconsistencies in different browsers.
To address that we've implemented our ISO 8601 parser but that made
library to significantly grow in size. To prevent inevitable bugs
and keep the library tiny, we made this trade-off.
See [this post](https://blog.date-fns.org/post/we-cut-date-fns-v2-minimal-build-size-down-to-300-bytes-and-now-its-the-smallest-date-library-18f2nvh2z0yal) for more details.
```javascript
// Before v2.0.0
addDays('2016-01-01', 1)
// v2.0.0 onward
addDays(parseISO('2016-01-01'), 1)
```
- **BREAKING**: new format string API for `format` function
which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).
See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.
| Unit | v2 Pattern | v1 Pattern | Result examples |
| ------------------------------- | ---------- | ---------- | --------------------------------- |
| Era | G..GGG | | AD, BC |
| | GGGG | | Anno Domini, Before Christ |
| | GGGGG | | A, B |
| Calendar year | y | | 44, 1, 1900, 2017 |
| | yo | | 44th, 1st, 0th, 17th |
| | yy | YY | 44, 01, 00, 17 |
| | yyy | | 044, 001, 1900, 2017 |
| | yyyy | YYYY | 0044, 0001, 1900, 2017 |
| | yyyyy | | ... |
| Local week-numbering year | Y | | 44, 1, 1900, 2017 |
| | Yo | | 44th, 1st, 1900th, 2017th |
| | YY | | 44, 01, 00, 17 |
| | YYY | | 044, 001, 1900, 2017 |
| | YYYY | | 0044, 0001, 1900, 2017 |
| | YYYYY | | ... |
| ISO week-numbering year | R | | -43, 0, 1, 1900, 2017 |
| | RR | GG | -43, 00, 01, 1900, 2017 |
| | RRR | | -043, 000, 001, 1900, 2017 |
| | RRRR | GGGG | -0043, 0000, 0001, 1900, 2017 |
| | RRRRR | | ... |
| Extended year | u | | -43, 0, 1, 1900, 2017 |
| | uu | | -43, 01, 1900, 2017 |
| | uuu | | -043, 001, 1900, 2017 |
| | uuuu | | -0043, 0001, 1900, 2017 |
| | uuuuu | | ... |
| Quarter (formatting) | Q | | 1, 2, 3, 4 |
| | Qo | | 1st, 2nd, 3rd, 4th |
| | QQ | | 01, 02, 03, 04 |
| | QQQ | | Q1, Q2, Q3, Q4 |
| | QQQQ | | 1st quarter, 2nd quarter, ... |
| | QQQQQ | | 1, 2, 3, 4 |
| Quarter (stand-alone) | q | Q | 1, 2, 3, 4 |
| | qo | Qo | 1st, 2nd, 3rd, 4th |
| | qq | | 01, 02, 03, 04 |
| | qqq | | Q1, Q2, Q3, Q4 |
| | qqqq | | 1st quarter, 2nd quarter, ... |
| | qqqqq | | 1, 2, 3, 4 |
| Month (formatting) | M | | 1, 2, ..., 12 |
| | Mo | | 1st, 2nd, ..., 12th |
| | MM | | 01, 02, ..., 12 |
| | MMM | | Jan, Feb, ..., Dec |
| | MMMM | | January, February, ..., December |
| | MMMMM | | J, F, ..., D |
| Month (stand-alone) | L | M | 1, 2, ..., 12 |
| | Lo | | 1st, 2nd, ..., 12th |
| | LL | MM | 01, 02, ..., 12 |
| | LLL | MMM | Jan, Feb, ..., Dec |
| | LLLL | MMMM | January, February, ..., December |
| | LLLLL | | J, F, ..., D |
| Local week of year | w | | 1, 2, ..., 53 |
| | wo | | 1st, 2nd, ..., 53th |
| | ww | | 01, 02, ..., 53 |
| ISO week of year | I | W | 1, 2, ..., 53 |
| | Io | Wo | 1st, 2nd, ..., 53th |
| | II | WW | 01, 02, ..., 53 |
| Day of month | d | D | 1, 2, ..., 31 |
| | do | Do | 1st, 2nd, ..., 31st |
| | dd | DD | 01, 02, ..., 31 |
| Day of year | D | DDD | 1, 2, ..., 365, 366 |
| | Do | DDDo | 1st, 2nd, ..., 365th, 366th |
| | DD | | 01, 02, ..., 365, 366 |
| | DDD | DDDD | 001, 002, ..., 365, 366 |
| | DDDD | | ... |
| Day of week (formatting) | E..EEE | | Mon, Tue, Wed, ..., Su |
| | EEEE | | Monday, Tuesday, ..., Sunday |
| | EEEEE | | M, T, W, T, F, S, S |
| | EEEEEE | | Mo, Tu, We, Th, Fr, Su, Sa |
| ISO day of week (formatting) | i | E | 1, 2, 3, ..., 7 |
| | io | do | 1st, 2nd, ..., 7th |
| | ii | | 01, 02, ..., 07 |
| | iii | ddd | Mon, Tue, Wed, ..., Su |
| | iiii | dddd | Monday, Tuesday, ..., Sunday |
| | iiiii | | M, T, W, T, F, S, S |
| | iiiiii | dd | Mo, Tu, We, Th, Fr, Su, Sa |
| Local day of week (formatting) | e | | 2, 3, 4, ..., 1 |
| | eo | | 2nd, 3rd, ..., 1st |
| | ee | | 02, 03, ..., 01 |
| | eee | | Mon, Tue, Wed, ..., Su |
| | eeee | | Monday, Tuesday, ..., Sunday |
| | eeeee | | M, T, W, T, F, S, S |
| | eeeeee | | Mo, Tu, We, Th, Fr, Su, Sa |
| Local day of week (stand-alone) | c | | 2, 3, 4, ..., 1 |
| | co | | 2nd, 3rd, ..., 1st |
| | cc | | 02, 03, ..., 01 |
| | ccc | | Mon, Tue, Wed, ..., Su |
| | cccc | | Monday, Tuesday, ..., Sunday |
| | ccccc | | M, T, W, T, F, S, S |
| | cccccc | | Mo, Tu, We, Th, Fr, Su, Sa |
| AM, PM | a..aaa | A | AM, PM |
| | aaaa | aa | a.m., p.m. |
| | aaaaa | | a, p |
| AM, PM, noon, midnight | b..bbb | | AM, PM, noon, midnight |
| | bbbb | | a.m., p.m., noon, midnight |
| | bbbbb | | a, p, n, mi |
| Flexible day period | B..BBB | | at night, in the morning, ... |
| | BBBB | | at night, in the morning, ... |
| | BBBBB | | at night, in the morning, ... |
| Hour [1-12] | h | | 1, 2, ..., 11, 12 |
| | ho | | 1st, 2nd, ..., 11th, 12th |
| | hh | | 01, 02, ..., 11, 12 |
| Hour [0-23] | H | | 0, 1, 2, ..., 23 |
| | Ho | | 0th, 1st, 2nd, ..., 23rd |
| | HH | | 00, 01, 02, ..., 23 |
| Hour [0-11] | K | | 1, 2, ..., 11, 0 |
| | Ko | | 1st, 2nd, ..., 11th, 0th |
| | KK | | 1, 2, ..., 11, 0 |
| Hour [1-24] | k | | 24, 1, 2, ..., 23 |
| | ko | | 24th, 1st, 2nd, ..., 23rd |
| | kk | | 24, 01, 02, ..., 23 |
| Minute | m | | 0, 1, ..., 59 |
| | mo | | 0th, 1st, ..., 59th |
| | mm | | 00, 01, ..., 59 |
| Second | s | | 0, 1, ..., 59 |
| | so | | 0th, 1st, ..., 59th |
| | ss | | 00, 01, ..., 59 |
| Fraction of second | S | | 0, 1, ..., 9 |
| | SS | | 00, 01, ..., 99 |
| | SSS | | 000, 0001, ..., 999 |
| | SSSS | | ... |
| Timezone (ISO-8601 w/ Z) | X | | -08, +0530, Z |
| | XX | | -0800, +0530, Z |
| | XXX | | -08:00, +05:30, Z |
| | XXXX | | -0800, +0530, Z, +123456 |
| | XXXXX | | -08:00, +05:30, Z, +12:34:56 |
| Timezone (ISO-8601 w/o Z) | x | | -08, +0530, +00 |
| | xx | ZZ | -0800, +0530, +0000 |
| | xxx | Z | -08:00, +05:30, +00:00 |
| | xxxx | | -0800, +0530, +0000, +123456 |
| | xxxxx | | -08:00, +05:30, +00:00, +12:34:56 |
| Timezone (GMT) | O...OOO | | GMT-8, GMT+5:30, GMT+0 |
| | OOOO | | GMT-08:00, GMT+05:30, GMT+00:00 |
| Timezone (specific non-locat.) | z...zzz | | GMT-8, GMT+5:30, GMT+0 |
| | zzzz | | GMT-08:00, GMT+05:30, GMT+00:00 |
| Seconds timestamp | t | X | 512969520 |
| | tt | | ... |
| Milliseconds timestamp | T | x | 512969520900 |
| | TT | | ... |
| Long localized date | P | | 5/29/53 |
| | PP | | May 29, 1453 |
| | PPP | | May 29th, 1453 |
| | PPPP | | Sunday, May 29th, 1453 |
| Long localized time | p | | 12:00 AM |
| | pp | | 12:00:00 AM |
| | ppp | | 12:00:00 AM GMT+2 |
| | pppp | | 12:00:00 AM GMT+02:00 |
| Combination of date and time | Pp | | 5/29/53, 12:00 AM |
| | PPpp | | May 29, 1453, 12:00 AM |
| | PPPppp | | May 29th, 1453 at ... |
| | PPPPpppp | | Sunday, May 29th, 1453 at ... |
Characters are now escaped using single quote symbols (`'`) instead of square brackets.
`format` now throws RangeError if it encounters an unescaped latin character
that isn't a valid formatting token.
To use `YY` and `YYYY` tokens that represent week-numbering years,
you should set `useAdditionalWeekYearTokens` option:
```javascript
format(Date.now(), 'YY', { useAdditionalWeekYearTokens: true })
//=> '86'
```
To use `D` and `DD` tokens which represent days of the year,
set `useAdditionalDayOfYearTokens` option:
```javascript
format(Date.now(), 'D', { useAdditionalDayOfYearTokens: true })
//=> '364'
```
- **BREAKING**: function submodules now use camelCase naming schema:
```javascript
// Before v2.0.0
import differenceInCalendarISOYears from 'date-fns/difference_in_calendar_iso_years'
// v2.0.0 onward
import differenceInCalendarISOYears from 'date-fns/differenceInCalendarISOYears'
```
- **BREAKING**: min and max functions now accept an array of dates
rather than spread arguments.
```javascript
// Before v2.0.0
var date1 = new Date(1989, 6 /* Jul */, 10)
var date2 = new Date(1987, 1 /* Feb */, 11)
var minDate = min(date1, date2)
var maxDate = max(date1, date2)
// v2.0.0 onward:
var dates = [new Date(1989, 6 /* Jul */, 10), new Date(1987, 1 /* Feb */, 11)]
var minDate = min(dates)
var maxDate = max(dates)
```
- **BREAKING**: make the second argument of `format` required for the sake of explicitness.
```javascript
// Before v2.0.0
format(new Date(2016, 0, 1))
// v2.0.0 onward
format(new Date(2016, 0, 1), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx")
```
- **BREAKING** renamed ISO week-numbering year helpers:
- `addISOYears` β `addISOWeekYears`
- `differenceInCalendarISOYears` β `differenceInCalendarISOWeekYears`
- `differenceInISOYears` β `differenceInISOWeekYears`
- `endOfISOYear` β `endOfISOWeekYear`
- `getISOYear` β `getISOWeekYear`
- `isSameISOYear` β `isSameISOWeekYear`
- `lastDayOfISOYear` β `lastDayOfISOWeekYear`
- `setISOYear` β `setISOWeekYear`
- `subISOYears` β `subISOWeekYears`
i.e. "ISO year" renamed to "ISO week year", which is short for
[ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).
It makes them consistent with locale-dependent week-numbering year helpers,
e.g., `startOfWeekYear`.
- **BREAKING**: functions renamed:
- `areRangesOverlapping` β `areIntervalsOverlapping`
- `eachDay` β `eachDayOfInterval`
- `getOverlappingDaysInRanges` β `getOverlappingDaysInIntervals`
- `isWithinRange` β `isWithinInterval`
This change was made to mirror the use of the word "interval" in standard ISO 8601:2004 terminology:
```
2.1.3
time interval
part of the time axis limited by two instants
```
Also these functions now accept an object with `start` and `end` properties
instead of two arguments as an interval. All these functions
throw `RangeError` if the start of the interval is after its end
or if any date in the interval is `Invalid Date`.
```javascript
// Before v2.0.0
areRangesOverlapping(
new Date(2014, 0, 10),
new Date(2014, 0, 20),
new Date(2014, 0, 17),
new Date(2014, 0, 21)
)
eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))
getOverlappingDaysInRanges(
new Date(2014, 0, 10),
new Date(2014, 0, 20),
new Date(2014, 0, 17),
new Date(2014, 0, 21)
)
isWithinRange(
new Date(2014, 0, 3),
new Date(2014, 0, 1),
new Date(2014, 0, 7)
)
// v2.0.0 onward
areIntervalsOverlapping(
{ start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
{ start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
)
eachDayOfInterval({
start: new Date(2014, 0, 10),
end: new Date(2014, 0, 20),
})
getOverlappingDaysInIntervals(
{ start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
{ start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
)
isWithinInterval(new Date(2014, 0, 3), {
start: new Date(2014, 0, 1),
end: new Date(2014, 0, 7),
})
```
- **BREAKING**: functions renamed:
- `distanceInWords` β `formatDistance`
- `distanceInWordsStrict` β `formatDistanceStrict`
- `distanceInWordsToNow` β `formatDistanceToNow`
to make them consistent with `format` and `formatRelative`.
- **BREAKING**: The order of arguments of `distanceInWords` and `distanceInWordsStrict`
is swapped to make them consistent with `differenceIn...` functions.
```javascript
// Before v2.0.0
distanceInWords(
new Date(1986, 3, 4, 10, 32, 0),
new Date(1986, 3, 4, 11, 32, 0),
{ addSuffix: true }
) //=> 'in about 1 hour'
// v2.0.0 onward
formatDistance(
new Date(1986, 3, 4, 11, 32, 0),
new Date(1986, 3, 4, 10, 32, 0),
{ addSuffix: true }
) //=> 'in about 1 hour'
```
- **BREAKING**: `partialMethod` option in `formatDistanceStrict` is renamed to `roundingMethod`.
```javascript
// Before v2.0.0
distanceInWordsStrict(
new Date(1986, 3, 4, 10, 32, 0),
new Date(1986, 3, 4, 10, 33, 1),
{ partialMethod: 'ceil' }
) //=> '2 minutes'
// v2.0.0 onward
formatDistanceStrict(
new Date(1986, 3, 4, 10, 33, 1),
new Date(1986, 3, 4, 10, 32, 0),
{ roundingMethod: 'ceil' }
) //=> '2 minutes'
```
- **BREAKING**: in `formatDistanceStrict`, if `roundingMethod` is not specified,
it now defaults to `round` instead of `floor`.
- **BREAKING**: `unit` option in `formatDistanceStrict` now accepts one of the strings:
'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'
```javascript
// Before v2.0.0
distanceInWordsStrict(
new Date(1986, 3, 4, 10, 32, 0),
new Date(1986, 3, 4, 10, 33, 1),
{ unit: 'm' }
)
// v2.0.0 onward
formatDistanceStrict(
new Date(1986, 3, 4, 10, 33, 1),
new Date(1986, 3, 4, 10, 32, 0),
{ unit: 'minute' }
)
```
- **BREAKING**: `parse` that previously used to convert strings and
numbers to dates now parse only strings in an arbitrary format
specified as an argument. Use `toDate` to coerce numbers and `parseISO`
to parse ISO 8601 strings.
```javascript
// Before v2.0.0
parse('2016-01-01')
parse(1547005581366)
parse(new Date()) // Clone the date
// v2.0.0 onward
parse('2016-01-01', 'yyyy-MM-dd', new Date())
parseISO('2016-01-01')
toDate(1547005581366)
toDate(new Date()) // Clone the date
```
- **BREAKING**: `toDate` (previously `parse`) now doesn't accept string
arguments but only numbers and dates. `toDate` called with an invalid
argument will return `Invalid Date`.
- **BREAKING**: new locale format.
See [docs/Locale](https://date-fns.org/docs/Locale).
Locales renamed:
- `en` β `en-US`
- `zh_cn` β `zh-CN`
- `zh_tw` β `zh-TW`
```javascript
// Before v2.0.0
import locale from 'date-fns/locale/zh_cn'
// v2.0.0 onward
import locale from 'date-fns/locale/zh-CN'
```
- **BREAKING**: now `closestTo` and `closestIndexTo` don't throw an exception
when the second argument is not an array, and return Invalid Date instead.
- **BREAKING**: now `isValid` doesn't throw an exception
if the first argument is not an instance of Date.
Instead, argument is converted beforehand using `toDate`.
Examples:
| `isValid` argument | Before v2.0.0 | v2.0.0 onward |
| ------------------------- | ------------- | ------------- |
| `new Date()` | `true` | `true` |
| `new Date('2016-01-01')` | `true` | `true` |
| `new Date('')` | `false` | `false` |
| `new Date(1488370835081)` | `true` | `true` |
| `new Date(NaN)` | `false` | `false` |
| `'2016-01-01'` | `TypeError` | `false` |
| `''` | `TypeError` | `false` |
| `1488370835081` | `TypeError` | `true` |
| `NaN` | `TypeError` | `false` |
We introduce this change to make _date-fns_ consistent with ECMAScript behavior
that try to coerce arguments to the expected type
(which is also the case with other _date-fns_ functions).
- **BREAKING**: functions now throw `RangeError` if optional values passed to `options`
are not `undefined` or have expected values.
This change is introduced for consistency with ECMAScript standard library which does the same.
- **BREAKING**: `format`, `formatDistance` (previously `distanceInWords`) and
`formatDistanceStrict` (previously `distanceInWordsStrict`) now throw
`RangeError` if one the passed arguments is invalid. It reflects behavior of
`toISOString` and Intl API. See [#1032](https://github.com/date-fns/date-fns/pull/1032).
- **BREAKING**: all functions now implicitly convert arguments by following rules:
| | date | number | string | boolean |
| --------- | ------------ | ------ | ----------- | ------- |
| 0 | new Date(0) | 0 | '0' | false |
| '0' | Invalid Date | 0 | '0' | false |
| 1 | new Date(1) | 1 | '1' | true |
| '1' | Invalid Date | 1 | '1' | true |
| true | Invalid Date | NaN | 'true' | true |
| false | Invalid Date | NaN | 'false' | false |
| null | Invalid Date | NaN | 'null' | false |
| undefined | Invalid Date | NaN | 'undefined' | false |
| NaN | Invalid Date | NaN | 'NaN' | false |
Notes:
- as before, arguments expected to be `Date` are converted to `Date` using _date-fns'_ `toDate` function;
- arguments expected to be numbers are converted to integer numbers using our custom `toInt