UNPKG

date-fns

Version:

Modern JavaScript date utility library

1,086 lines (771 loc) β€’ 70.4 kB
# 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.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 `toInteger` implementation (see [#765](https://github.com/date-fns/date-fns/pull/765)); - arguments expected to be strings are converted to strings using JavaScript's `String` function; - arguments expected to be booleans are converted to boolean using JavaScript's `Boolean` function. `null` and `undefined` passed to optional arguments (i.e. properties of `options` argument) are ignored as if no argument was passed. If any resulting argument is invalid (i.e. `NaN` for numbers and `Invalid Date` for dates), an invalid value will be returned: - `false` for functions that return booleans (expect `isValid`); - `Invalid Date` for functions that return dates; - and `NaN` for functions that return numbers. See tests and PRs [#460](https://github.com/date-fns/date-fns/pull/460) and [#765](https://github.com/date-fns/date-fns/pull/765) for exact behavior. - **BREAKING**: all functions now check if the passed number of arguments is less than the number of required arguments and throw `TypeError` exception if so. - **BREAKING**: The Bower & UMD/CDN package versions are no longer supported. - **BREAKING**: `null` now is not a valid date. `isValid(null)` returns `false`; `toDate(null)` returns an invalid date. Since `toDate` is used internally by all the functions, operations over `null` will also return an invalid date. [See #537](https://github.com/date-fns/date-fns/issues/537) for the reasoning. - `toDate` (previously `parse`) and `isValid` functions now accept `any` type as the first argument. - [Exclude `docs.json` from the npm package](https://github.com/date-fns/date-fns/pull/837). Kudos to [@hawkrives](https://github.com/hawkrives). ### Added - FP functions like those in [lodash](https://github.com/lodash/lodash/wiki/FP-Guide), that support [currying](https://en.wikipedia.org/wiki/Currying), and, as a consequence, functional-style [function composing](https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba). Functions with options (`format`, `parse`, etc.) have two FP counterparts: one that has the options object as its first argument and one that hasn't. The name of the former has `WithOptions` added to the end of its name. In FP functions, the order of arguments is reversed. See [FP Guide](docs/fp) for more information. ```javascript import addYears from 'date-fns/fp/addYears' import formatWithOptions from 'date-fns/fp/formatWithOptions' import eo from 'date-fns/locale/eo' // If FP function has not received enough arguments, it returns another function const addFiveYears = addYears(5) // Several arguments can be curried at once const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy') const dates = [ new Date(2017, 0 /* Jan */, 1), new Date(2017, 1 /* Feb */, 11), new Date(2017, 6 /* Jul */, 2) ] const formattedDates = dates.map(date => dateToString(addFiveYears(date))) //=> ['1 januaro 2022', '11 februaro 2022', '2 julio 2022'] ``` - Added support for [ECMAScript Modules](http://www.ecma-international.org/ecma-262/6.0/#sec-modules). It allows usage with bundlers that support tree-shaking, like [rollup.js](http://rollupjs.org) and [webpack](https://webpack.js.org): ```javascript // Without tree-shaking: import format from 'date-fns/format' import parse from 'date-fns/parse' // With tree-shaking: import { format, parse } from 'date-fns' ``` Also, ESM functions provide default export, they can be used with TypeScript to import functions in more idiomatic way: ```typescript // Before import * as format from 'date-fns/format' // Now import format from 'date-fns/format' ``` - `formatRelative` function. See [formatRelative](https://date-fns.org/docs/formatRelative) - Flow typings for `index.js`, `fp/index.js`, `locale/index.js`, and their ESM equivalents. See PR [#558](https://github.com/date-fns/date-fns/pull/558) - New locale-dependent week-numbering year helpers: - `getWeek` - `getWeekYear` - `setWeek` - `setWeekYear` - `startOfWeekYear` - Added `eachWeekOfInterval`, the weekly equivalent of `eachDayOfInterval` - [Added `getUnixTime` function](https://github.com/date-fns/date-fns/pull/870). Kudos to [@Kingwl](https://github.com/Kingwl). - [New decade helpers](https://github.com/date-fns/date-fns/pull/839). Thanks to [@y-nk](https://github.com/y-nk)! - `getDecade` - `startOfDecade` - `endOfDecade` - `lastDayOfDecade` - [New `roundToNearestMinutes` function](https://github.com/date-fns/date-fns/pull/928). Kudos to [@xkizer](https://github.com/xkizer). - Added new function `fromUnixTime`. Thansk to [@xkizer](https://github.com/xkizer). - New interval, month, and year helpers to fetch a list of all Saturdays and Sundays (weekends) for a given date interval. `eachWeekendOfInterval` is the handler function while the other two are wrapper functions. Kudos to [@laekettavong](https://github.com/laekettavong)! - `eachWeekendOfInterval` - `eachWeekendOfMonth` - `eachWeekendOfYear` - Build-efficient `lightFormat` that only supports the popular subset of tokens. See [#1050](https://github.com/date-fns/date-fns/pull/1015). - `parseISO` function that parses ISO 8601 strings. See [#1023](https://github.com/date-fns/date-fns/pull/1023). - Add constants that can be imported directly from `date-fns` or the submodule `date-fns/constants`: - `maxTime` - `minTime` - New locales: - [Norwegian Nynorsk locale (nn)](https://github.com/date-fns/date-fns/pull/1172) by [@draperunner](https://github.com/draperunner). - [Ukrainian locale (ua)](https://github.com/date-fns/date-fns/pull/532) by [@korzhyk](https://github.com/korzhyk). - [Vietnamese locale (vi)](https://github.com/date-fns/date-fns/pull/546) by [@trongthanh](https://github.com/trongthanh). - [Persian locale (fa-IR)](https://github.com/date-fns/date-fns/pull/1113) by [@mort3za](https://github.com/mort3za). - [Latvian locale (lv)](https://github.com/date-fns/date-fns/pull/1175) by [@prudolfs](https://github.com/prudolfs). - [Bengali locale (bb)](https://github.com/date-fns/date-fns/pull/845) by [@nutboltu](https://github.com/nutboltu) and [@touhidrahman](https://github.com/touhidrahman). - [Hungarian (hu) and Lithuanian (lt) locales](https://github.com/date-fns/date-fns/pull/864) by [@izifortune](https://github.com/izifortune) and [pardoeryanair](https://github.com/pardoeryanair). - [Canadian English locale (en-CA)](https://github.com/date-fns/date-fns/pull/688) by [@markowsiak](https://github.com/markowsiak). - [Great Britain English locale (en-GB)](https://github.com/date-fns/date-fns/pull/563) by [@glintik](https://github.com/glintik). - [Uighur locale (ug)](https://github.com/date-fns/date-fns/pull/1080) by [@abduwaly](https://github.com/abduwaly). - [Add new function `differenceInBusinessDays`](https://github.com/date-fns/date-fns/pull/1194) which calculates the difference in business days. Kudos to [@ThorrStevens](https://github.com/ThorrStevens)! - [Add new function `addBusinessDays`](https://github.com/date-fns/date-fns/pull/1154), similar to `addDays` but ignoring weekends. Thanks to [@ThorrStevens](https://github.com/ThorrStevens)! ## [1.30.1] - 2018-12-10 ### Fixed - [Fixed DST issue](https://github.com/date-fns/date-fns/pull/1005). 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. This fix was backported from v2. - 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/issues/789). This fix was backported from v2. - [Fix misspelled January in the Thai locale](https://github.com/date-fns/date-fns/pull/913). Thanks to [@ratchapol-an](https://github.com/ratchapol-an)! ### Added - [Added Serbian locale](https://github.com/date-fns/date-fns/pull/717). Kudos to [@mawi12345](https://github.com/mawi12345)! - [Added Belarusian locale](https://github.com/date-fns/date-fns/pull/716). Kudos to [@mawi12345](https://github.com/mawi12345) again! ### Changed - [Improve ja translation of distanceInWords](https://github.com/date-fns/date-fns/pull/880). Thanks to [@kudohamu](https://github.com/kudohamu)! ## [1.30.0] - 2018-12-10 ⚠️ The release got failed. ## [1.29.0] - 2017-10-11 ### Fixed - Fix Italian translations for `formatDistance`. ([see the issue: #550](https://github.com/date-fns/date-fns/issues/550); [see the PR: #552](https://github.com/date-fns/date-fns/pull/552)) Thanks to [@giofilo](https://github.com/giofilo)! ### Added - [Hungarian locale (hu)](https://github.com/date-fns/date-fns/pull/503) (thanks to LΓ‘szlΓ³ HorvΓ‘th [@horvathlg](https://github.com/horvathlg)) - [Slovenian locale (sl)](https://github.com/date-fns/date-fns/pull/505) (thanks to Adam Stradovnik [@Neoglyph](https://github.com/Neoglyph)) - Add `step` to `eachDay` function. Thanks to [@BDav24](https://github.com/BDav24). See PR [#487](https://github.com/date-fns/date-fns/pull/487). ## [1.28.5] - 2017-05-19 ### Fixed - Fix a.m./p.m. formatters in Chinese Simplified locale. Thanks to [@fnlctrl](https://github.com/fnlctrl). See PR [#486](https://github.com/date-fns/date-fns/pull/486) ## [1.28.4] - 2017-04-26 ### Fixed - Fix accents on weekdays in the Italian locale. See PR [#481](https://github.com/date-fns/date-fns/pull/481). Thanks to [@albertorestifo](https://github.com/albertorestifo) - Fix typo in `ddd` format token in Spanish language locale. Kudos to [@fjaguero](https://github.com/fjaguero). See PR [#482](https://github.com/date-fns/date-fns/pull/482) ## [1.28.3] - 2017-04-14 ### Fixed - Fix ordinal numbers for Danish language locale. Thanks to [@kgram](https://github.com/kgram). See PR [#474](https://github.com/date-fns/date-fns/pull/474) ## [1.28.2] - 2017-03-27 ### Fixed - Fix `dd` and `ddd` formatters in Polish language locale. Kudos to [@justrag](https://github.com/justrag). See PR: [#467](https://github.com/date-fns/date-fns/pull/467) ## [1.28.1] - 2017-03-19 ### Fixed - Fix DST border bug in `addMilliseconds`, `addSeconds`, `addMinutes`, `addHours`, `subMilliseconds`, `subSeconds`, `subMinutes` and `subHours`. See issue [#465](https://github.com/date-fns/date-fns/issues/465) - Minor fix for Indonesian locale. Thanks to [@bentinata](https://github.com/bentinata). See PR: [#458](https://github.com/date-fns/date-fns/pull/458) ## [1.28.0] - 2017-02-27 ### Added - [Romanian locale (ro)](https://github.com/date-fns/date-fns/pull/446) (thanks to Sergiu Munteanu [@jsergiu](https://github.com/jsergiu)) ### Fixed - All functions now convert all their arguments to the respective types. See PR: [#443](https://github.com/date-fns/date-fns/pull/443) - Fixes for ordinals (1er, 2, 3, …) in French locale. Thanks to [@fbonzon](https://github.com/fbonzon). See PR: [#449](https://github.com/date-fns/date-fns/pull/449) ## [1.27.2] - 2017-02-01 ### Fixed - Various fixes for Dutch locale. See PR: [#416](https://github.com/date-fns/date-fns/pull/416). Thanks to Ruben Stolk [@rubenstolk](https://github.com/rubenstolk) ## [1.27.1] - 2017-01-20 ### Fixed - Added generation of TypeScript locale sub-modules, allowing import of locales in TypeScript. ## [1.27.0] - 2017-01-19 ### Added - [Macedonian locale (mk)](https://github.com/date-fns/date-fns/pull/398) (thanks to Petar Vlahu [@vlahupetar](https://github.com/vlahupetar)) ## [1.26.0] - 2017-01-15 ### Added - `getTime` ### Fixed - Various fixes for Japanese locale. See PR: [395](https://github.com/date-fns/date-fns/pull/395). Thanks to Yamagishi Kazutoshi [@ykzts](https://github.com/ykzts) ## [1.25.0] - 2017-01-11 ### Added - [Bulgarian locale (bg)](https://github.com/date-fns/date-fns/pull/357) (thanks to Nikolay Stoynov [@arvigeus](https://github.com/arvigeus)) - [Czech locale (cs)](https://github.com/date-fns/date-fns/pull/386) (thanks to David Rus [@davidrus](https://github.com/davidrus)) ## [1.24.0] - 2017-01-06 ### Added - [Modern Standard Arabic locale (ar)](https://github.com/date-fns/date-fns/pull/367) (thanks to Abdallah Hassan [@AbdallahAHO](https://github.com/AbdallahAHO)) ## [1.23.0] - 2017-01-05 ### Added - Auto generate TypeScript and flow typings from documentation on release. Thanks to [@mattlewis92](https://github.com/mattlewis92). See related PRs: [#355](https://github.com/date-fns/date-fns/pull/355), [#370](https://github.com/date-fns/date-fns/pull/370) - [Croatian locale (hr)](https://github.com/date-fns/date-fns/pull/365) (thanks to Matija MarohniΔ‡ [@silvenon](https://github.com/silvenon)) - [Thai locale (th)](https://github.com/date-fns/date-fns/pull/362) (thanks to Athiwat Hirunworawongkun [@athivvat](https://github.com/athivvat)) - [Finnish locale (fi)](https://github.com/date-fns/date-fns/pull/361) (thanks to Pyry-Samuli Lahti [@Pyppe](https://github.com/Pyppe)) ## [1.22.0] - 2016-12-28 ### Added - [Icelandic locale (is)](https://github.com/date-fns/date-fns/pull/356) (thanks to Derek Blank [@derekblank](https://github.com/derekblank)) ## [1.21.1] - 2016-12-18 ### Fixed - Fix `isBefore` and `isAfter` documentation mistakes. ## [1.21.0] - 2016-12-16 ### Added - [Filipino locale (fil)](https://github.com/date-fns/date-fns/pull/339) (thanks to Ian De La Cruz [@RIanDeLaCruz](https://github.com/RIanDeLaCruz)) - [Danish locale (da)](https://github.com/date-fns/date-fns/pull/343) (kudos to Anders B. Hansen [@Andersbiha](https://github.com/Andersbiha)) ## [1.20.1] - 2016-12-14 ### Fixed - Fix documentation for `getOverlappingDaysInRanges`. ## [1.20.0] - 2016-12-13 ### Added - `areRangesOverlapping` and `getOverlappingDaysInRanges` Thanks to Joanna T [@asia-t](https://github.com/asia-t). See PR: [#331](https://github.com/date-fns/date-fns/pull/331) ## [1.19.0] - 2016-12-13 ### Added - [Greek locale (el)](https://github.com/date-fns/date-fns/pull/334) (kudos to Theodoros Orfanidis [@teoulas](https://github.com/teoulas)) - [Slovak locale (sk)](https://github.com/date-fns/date-fns/pull/336) (kudos to Marek Suscak [@mareksuscak](https://github.com/mareksuscak)) - Add yarn support. Thanks to Uladzimir Havenchyk [@havenchyk](https://github.com/havenchyk). See PR: [#288](https://github.com/date-fns/date-fns/pull/288) ## [1.18.0] - 2016-12-12 ### Added - [Turkish locale (tr)](https://github.com/date-fns/date-fns/pull/329) (kudos to Alpcan AydΔ±n [@alpcanaydin](https://github.com/alpcanaydin)) - [Korean locale (ko)](https://github.com/date-fns/date-fns/pull/327) (thanks to Hong Chulju [@angdev](https://github.com/angdev)) ### Fixed - `SS` and `SSS` formats in `format` are now correctly displayed with leading zeros. Thanks to Paul Dijou [@pauldijou](https://github.com/pauldijou). See PR: [#330](https://github.com/date-fns/date-fns/pull/330) ## [1.17.0] - 2016-12-10 ### Added - [Polish locale (pl)](https://github.com/d