landvex: Fixar och tester klara för alla komponenter

- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
This commit is contained in:
Bernt
2026-07-05 06:41:32 +00:00
parent f4f853d94b
commit aee0f09db8
19583 changed files with 1450867 additions and 1153 deletions
+2569
View File
@@ -0,0 +1,2569 @@
# 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/
## v2.30.0 - 2023-04-30
Kudos to @kossnocorp and @Andarist for working on the release.
### Changes
- Fixed increased build size after enabling compatibility with older browsers in the previous release. This was done by adding @babel/runtime as a dependency. [See more details](https://github.com/date-fns/date-fns/issues/3208#issuecomment-1528592465).
## v2.29.3 - 2022-09-13
This release is prepared by our own @leshakoss.
### Fixed
- [Fixed Ukrainian (`uk`) locale grammar for `formatDistance`.](https://github.com/date-fns/date-fns/pull/3175)
- [Improved browser compatibility by transforming the code with `@babel/preset-env`.](https://github.com/date-fns/date-fns/pull/3167)
## v2.29.2 - 2022-08-18
This release is brought to you by @nopears, @vadimpopa and @leshakoss.
### Fixed
- [Fixed `sv` locale abbreviated months matcher.](https://github.com/date-fns/date-fns/pull/3160)
- [Fixed `uk` locale abbreviated months matcher.](https://github.com/date-fns/date-fns/pull/3139)
- [Fixed a breaking change in `intervalToDuration` by removing a recently introduced RangeError.](https://github.com/date-fns/date-fns/pull/3153)
## v2.29.1 - 2022-08-18
Thanks to @fturmel for working on the release.
### Fixed
- [Fixed TypeScript and flow types for daysInYear constant.](https://github.com/date-fns/date-fns/pull/3125)
## v2.29.0 - 2022-07-22
On this release worked @tan75, @kossnocorp, @nopears, @Balastrong, @cpapazoglou, @dovca, @aliasgar55, @tomchentw, @JuanM04, @alexandresaura, @fturmel, @aezell, @andersravn, @TiagoPortfolio, @SukkaW, @Zebreus, @aviskarkc10, @maic66, @a-korzun, @Mejans, @davidspiess, @alexgul1, @matroskin062, @undecaf, @mprovenc, @jooola and @leshakoss.
### Added
- [Added `intlFormatDistance` function`.](https://github.com/date-fns/date-fns/pull/2173)
- [Added `setDefaultOptions` and `getDefaultOptions` functions that allow you to set default default locale, `weekStartsOn` and `firstWeekContainsDate`.](https://github.com/date-fns/date-fns/pull/3069)
- [Added `roundingMethod` option to `roundToNearestMinutes`.](https://github.com/date-fns/date-fns/pull/3091)
- [Added Swiss Italian locale (`it-CH`).](https://github.com/date-fns/date-fns/pull/2886)
- [Added Occitan (`oc`) locale.](https://github.com/date-fns/date-fns/pull/2106) ([#2061](https://github.com/date-fns/date-fns/issues/2061))
- [Added Belarusian Classic (`be-tarask`) locale.](https://github.com/date-fns/date-fns/pull/3115)
### Fixed
- [Fixed Azerbaijani (`az`) locale for `formatDistance`.](https://github.com/date-fns/date-fns/pull/2924)
- [Fixed Czech (`cs`) locale for `parse`.](https://github.com/date-fns/date-fns/pull/3059)
- [Fixed TypeScript types for constants.](https://github.com/date-fns/date-fns/pull/2941)
- [Fixed long formatters in the South African English locale (`en-ZA`).](https://github.com/date-fns/date-fns/pull/3014)
- [Fixed a typo in the Icelandic locale (`is`) for `format`.](https://github.com/date-fns/date-fns/pull/2974)
- [Fixed weekday format for `formatRelative` in the Portuguese locale (`pt`).](https://github.com/date-fns/date-fns/pull/2992)
- [Fixed `intervalToDuration` being off by 1 day sometimes.](https://github.com/date-fns/date-fns/pull/2616)
- [Fixed ordinal number formatting in Italian locale (`it`).](https://github.com/date-fns/date-fns/pull/1617)
- [Fixed issue parsing months in Croatian (`hr`), Georgian (`ka`) and Serbian (`sr` and `sr-Latn`) locales.](https://github.com/date-fns/date-fns/pull/2898)
### Changed
- [Replaced `git.io` links with full URLs in error messages.](https://github.com/date-fns/date-fns/pull/3021)
- [_Internal_: removed "v2.0.0 breaking changes" section from individual function docs](https://github.com/date-fns/date-fns/pull/2905)
## v2.28.0 - 2021-12-28
Kudos to @tan75, @fturmel, @arcanar7, @jeffjose, @helmut-lang, @zrev2220, @jooola, @minitesh, @cowboy-bebug, @mesqueeb, @JuanM04, @zhirzh, @damon02 and @leshakoss for working on the release.
### Added
- [Added West Frisian (`fy`) locale.](https://github.com/date-fns/date-fns/pull/2183)
- [Added Uzbek Cyrillic locale (`uz-Cyrl`).](https://github.com/date-fns/date-fns/pull/2811)
### Fixed
- [add the missing accent mark for Saturday in Spanish locale (`es`) for `format`.](https://github.com/date-fns/date-fns/pull/2869)
- [allowed `K` token to be used with `a` or `b` in `parse`.](https://github.com/date-fns/date-fns/pull/2814)
## v2.27.0 - 2021-11-30
Kudos to @tan75, @hg-pyun, @07akioni, @razvanmitre, @Haqverdi, @pgcalixto, @janziemba, @fturmel, @JuanM04, @zhirzh, @seanghay, @bulutfatih, @nodeadtree, @cHaLkdusT, @a-korzun, @fishmandev, @wingclover, @Zacharias3690, @kossnocorp and @leshakoss for working on the release.
### Fixed
- [Fixed translation for quarters in `format` in Chinese Simplified locale (`zh-CN`).](https://github.com/date-fns/date-fns/pull/2771)
- [Fixed `P` token in `format` for Romanian locale (`ro`).](https://github.com/date-fns/date-fns/pull/2213)
- [Fixed era and month formatters in Azerbaijani locale (`az`).](https://github.com/date-fns/date-fns/pull/1632)
- [Fixed `formatRelative` patterns in Georgian locale (`ka`).](https://github.com/date-fns/date-fns/pull/2797)
- [Fixed regular expressions for `parse` in Estonian locale (`er`).](https://github.com/date-fns/date-fns/pull/2038)
- [Fixed the format of zeros in `formatDuration` in Czech locale (`cs`).](https://github.com/date-fns/date-fns/pull/2579)
- [Fixed ordinal formatting for years, weeks, hours, minutes and seconds in `fr`, `fr-CA` and `fr-CH` locales.](https://github.com/date-fns/date-fns/pull/2626)
- [Fixed constants not having proper TypeScript and Flow types.](https://github.com/date-fns/date-fns/pull/2791)
- [Fixed translation for Monday in Turkish locale (`tr`).](https://github.com/date-fns/date-fns/pull/2720)
- [Fixed `eachMinuteOfInterval` not handling intervals less than a minute correctly.](https://github.com/date-fns/date-fns/pull/2603)
- [Fixed flow types for `closestTo` and `closestIndexTo`.](https://github.com/date-fns/date-fns/pull/2781)
### Added
- [Added Khmer locale (`km`).](https://github.com/date-fns/date-fns/pull/2713)
## v2.26.0 - 2021-11-19
Thanks to @kossnocorp, @leshakoss, @tan75, @gaplo, @AbdAllahAbdElFattah13, @fturmel, @kentaro84207, @V-Gutierrez, @atefBB, @jhonatanmacazana, @zhirzh, @Haqverdi, @mandaputtra, @micnic and @rikkalo for working on the release.
### Fixed
- [Fixed `formatRelative` format for `lastWeek` in Spanish locale.](https://github.com/date-fns/date-fns/pull/2753)
- [Fixed translation for October in Hindi locale.](https://github.com/date-fns/date-fns/pull/2729)
- [Fixed Azerbaijani locale to use correct era matchers for `parse`.](https://github.com/date-fns/date-fns/pull/1633)
- [Added the functions that use `weekStartsOn` and `firstWeekContainsDate` that were missing from the `Locale` documentation page.](https://github.com/date-fns/date-fns/pull/2652)
### Changed
- [Changed abbreviation for August from "Ags" to "Agt" in Indonesian locale.](https://github.com/date-fns/date-fns/pull/2658)
### Added
- [Added Irish English locale (`en-IE`).](https://github.com/date-fns/date-fns/pull/2772)
- [Added Arabic locale (`ar`).](https://github.com/date-fns/date-fns/pull/2721) ([#1670](https://github.com/date-fns/date-fns/issues/1670))
- [Added Hong Kong Traditional Chinese locale (zh-HK).](https://github.com/date-fns/date-fns/pull/2686) ([#2684](https://github.com/date-fns/date-fns/issues/2684))
- [Added Egyptian Arabic locale (ar-EG).](https://github.com/date-fns/date-fns/pull/2699)
## v2.25.0 - 2021-10-05
This release is brought to you by @kossnocorp, @gierschv, @fturmel, @redbmk, @mprovenc, @artyom-ivanov and @tan75.
### Added
- [Added Japanese Hiragana locale (`ja-Hira`).](https://github.com/date-fns/date-fns/pull/2663)
- [Added standalone months support to `de` and `de-AT` locales.](https://github.com/date-fns/date-fns/pull/2602)
## v2.24.0 - 2021-09-17
Kudos to [Sasha Koss](http://github.com/kossnocorp), [Lucas Silva](http://github.com/LucasHFS), [Jan Ziemba](http://github.com/janziemba), [Anastasia Kobzar](http://github.com/rikkalo), [Deepak Gupta](http://github.com/Mr-DG-Wick), [Jonas L](http://github.com/jooola), [Kentaro Suzuki](http://github.com/kentaro84207), [Koussay Haj Kacem](http://github.com/essana3), [fturmel](http://github.com/fturmel), [Tan75](http://github.com/tan75) and [Adriaan Callaerts](http://github.com/call-a3) for working on the release.
### Fixed
- [Fixed an edge case in the Slovak locale caused by unescaped character.](https://github.com/date-fns/date-fns/pull/2540) ([#2083](https://github.com/date-fns/date-fns/issues/2083))
### Changed
- [Used `1` instead of `ein` for German `formatDuration` to make it consistent with other locales and formats.](https://github.com/date-fns/date-fns/pull/2576) ([#2505](https://github.com/date-fns/date-fns/issues/2505))
- [Made Norwegian `formatDuration` consistent with other locales by using numeric representation instead of written.](https://github.com/date-fns/date-fns/pull/2631) ([#2469](https://github.com/date-fns/date-fns/issues/2469))
- [Use the word "sekunda" instead of "vteřina" for second in the Czech locale.](https://github.com/date-fns/date-fns/pull/2577)
- [Made Flemish short date format corresponds to the Flemish government.](https://github.com/date-fns/date-fns/pull/2535)
### Added
- [Added `roundingMethod` option to `differenceInHours`, `differenceInMinutes`, `differenceInQuarters`, `differenceInSeconds` and `differenceInWeeks` with `trunc` as the default method.](https://github.com/date-fns/date-fns/pull/2571) ([#2555](https://github.com/date-fns/date-fns/issues/2555))
- [Added new functions: `previousDay`, `previousMonday`, `previousTuesday`, `previousWednesday`, `previousThursday`, `previousFriday`, `previousSaturday` and `previousSunday`.](https://github.com/date-fns/date-fns/pull/2522)
## v2.23.0 - 2021-07-23
Thanks to [Liam Tait](http://github.com/Liam-Tait), [fturmel](http://github.com/fturmel), [Takuya Uehara](http://github.com/indigolain), [Branislav Lazic](http://github.com/BranislavLazic), [Seyyed Morteza Moosavi](http://github.com/smmoosavi), [Felipe Armoni](http://github.com/komyg), [Sasha Koss](http://github.com/kossnocorp), [Michael Mok](http://github.com/pmmmwh), [Tan75](http://github.com/tan75) and [Maxim Topciu](http://github.com/maximtop) for working on the release.
### Changed
- [Improved `nextDay` performance by roughly 50%.](https://github.com/date-fns/date-fns/pull/2524)
- [Added more ordinal formatting to the Japanese locale.](https://github.com/date-fns/date-fns/pull/2471)
### Added
- [Added a new `clamp` function that allows to bound a date to an interval.](https://github.com/date-fns/date-fns/pull/2498)
- [Added Bosnian locale (bs).](https://github.com/date-fns/date-fns/pull/2495)
- [Allowed passing `undefined` in the duration to add and sub functions.](https://github.com/date-fns/date-fns/pull/2515)
## v2.22.1 - 2021-05-28
Thanks to [Sasha Koss](http://github.com/kossnocorp) for working on the release.
### Fixed
- Fixed constant typings. ([#2491](https://github.com/date-fns/date-fns/issues/2491))
## v2.22.0 - 2021-05-28
[Sasha Koss](http://github.com/kossnocorp), [Lucas Silva](http://github.com/LucasHFS), [Lay](http://github.com/brownsugar), [jwbth](http://github.com/jwbth), [fturmel](http://github.com/fturmel), [Tan75](http://github.com/tan75) and [Anastasia Kobzar](http://github.com/rikkalo) worked on this release.
### Fixed
- [Fixed Taiwanese locale to use traditional Chinese and removed unnecessary spaces.](https://github.com/date-fns/date-fns/pull/2436)
- [Fixed Russian locale to use correct long formats.](https://github.com/date-fns/date-fns/pull/2478)
### Added
- [Added 18 new conversion functions](https://github.com/date-fns/date-fns/pull/2433):
- `daysToWeeks`
- `hoursToMilliseconds`
- `hoursToMinutes`
- `hoursToSeconds`
- `millisecondsToHours`
- `millisecondsToMinutes`
- `millisecondsToSeconds`
- `minutesToHours`
- `minutesToMilliseconds`
- `minutesToSeconds`
- `monthsToQuarters`
- `monthsToYears`
- `quartersToMonths`
- `quartersToYears`
- `secondsToHours`
- `secondsToMilliseconds`
- `secondsToMinutes`
- `weeksToDays`
- `yearsToMonths`
- `yearsToQuarters`
## v2.21.3 - 2021-05-08
This release is brought to you by [Maxim Topciu](http://github.com/maximtop).
### Fixed
- [Fixed IE11 support by babelifing the shorthand properties.](https://github.com/date-fns/date-fns/pull/2467)
## v2.21.2 - 2021-05-05
Kudos to [Aleksei Korzun](http://github.com/a-korzun), [Maxim Topciu](http://github.com/maximtop), [Jonas L](http://github.com/jooola), [Mohammad ali Ali panah](http://github.com/always-maap) and [Tan75](http://github.com/tan75) for working on the release.
### Fixed
- [`differenceInBusinessDays` now returns `NaN` instead of `Invalid Date` when an invalid argument is passed to the function.](https://github.com/date-fns/date-fns/pull/2414)
- [Fixed `weekStartsOn` in Persian locale.](https://github.com/date-fns/date-fns/pull/2430)
## v2.21.1 - 2021-04-15
Thanks to [Sasha Koss](http://github.com/kossnocorp) for working on the release.
### Fixed
- [Fixed a breaking change introduced by using modern default argument value syntax (see https://github.com/Hacker0x01/react-datepicker/issues/2870).](https://github.com/date-fns/date-fns/pull/2423)
## v2.21.0 - 2021-04-14
This release is brought to you by [Aleksei Korzun](http://github.com/a-korzun), [Tan75](http://github.com/tan75), [Rubens Mariuzzo](http://github.com/rmariuzzo), [Christoph Stenglein](http://github.com/cstenglein) and [Clément Tamisier](http://github.com/ctamisier).
### Fixed
- [Made `formatDistanceStrict` return `12 months` instead of `1 year` when `unit: 'month'`.](https://github.com/date-fns/date-fns/pull/2411)
### Added
- [Added Haitian Creole (`ht`) locale.](https://github.com/date-fns/date-fns/pull/2396)
- [Added Austrian German (`de-AT`) locale.](https://github.com/date-fns/date-fns/pull/2362)
## v2.20.3 - 2021-04-13
Kudos to [fturmel](http://github.com/fturmel) for working on the release.
### Fixed
- [Fixed broken tree-shaking caused by missing links to corresponding ESM.](https://github.com/date-fns/date-fns/pull/2339) ([#2207](https://github.com/date-fns/date-fns/issues/2207))
## v2.20.2 - 2021-04-12
Kudos to [Maxim Topciu](http://github.com/maximtop) for working on the release.
### Fixed
- [Fixed IE11 incompatibility caused by the usage of spread syntax.](https://github.com/date-fns/date-fns/pull/2407) ([#2408](https://github.com/date-fns/date-fns/issues/2408))
## v2.20.1 - 2021-04-09
This release is brought to you by [Sasha Koss](http://github.com/kossnocorp) and [Tan75](http://github.com/tan75).
### Fixed
- Fixed `isDate` Flow typings that we broke in `v2.20.0`.
## v2.20.0 - 2021-04-08
This release is brought to you by [Sasha Koss](http://github.com/kossnocorp), [Maxim Topciu](http://github.com/maximtop), [tu4mo](http://github.com/tu4mo), [Tan75](http://github.com/tan75), [Ardit Dine](http://github.com/arditdine), [Carl Rosell](http://github.com/CarlRosell), [Roman Mahotskyi](http://github.com/enheit), [Mateusz Krzak](http://github.com/mateuszkrzak), [fgottschalk](http://github.com/fgottschalk), [Anastasia Kobzar](http://github.com/rikkalo), [Bilguun Ochirbat](http://github.com/bilguun0203), [Lesha Koss](http://github.com/leshakoss), [YuLe](http://github.com/yuler) and [guyroberts21](http://github.com/guyroberts21).
### Fixed
- [Made `formatDistanceStrict` and `formatDistanceToNowStrict` always return `1 year` instead of `12 months`.](https://github.com/date-fns/date-fns/pull/2391) ([#2388](https://github.com/date-fns/date-fns/issues/2388))
- Fixed `nextDay`, `nextMonday` and `nextTuesday` missing in exports and type definitions. ([#2325](https://github.com/date-fns/date-fns/issues/2325))
- [Fixed a DST bug in `formatDistanceStrict`.](https://github.com/date-fns/date-fns/pull/2329) ([#2307](https://github.com/date-fns/date-fns/issues/2307))
### Added
- [Added new `eachMinuteOfInterval` function.](https://github.com/date-fns/date-fns/pull/2382)
- [Added Albanian (`sq`) locale](https://github.com/date-fns/date-fns/pull/2290)
- [Added Mongolian (`mn`) locale](https://github.com/date-fns/date-fns/pull/1961)
- [Added `nextWednesday`, `nextThursday`, `nextFriday`, `nextSaturday` and `nextSunday`.](https://github.com/date-fns/date-fns/pull/2291)
## v2.19.0 - 2021-03-05
[Tan75](http://github.com/tan75) worked on this release.
### Fixed
- [Assigned the correct `firstWeekContainsDate` value (`4`) for the French locale.](https://github.com/date-fns/date-fns/pull/2273) ([#2148](https://github.com/date-fns/date-fns/issues/2148))
- [Fixed torsdag abbreviation in the Swedish locale.](https://github.com/date-fns/date-fns/pull/2220)
- [Fixed a bug in `differenceInMonths` and `intervalToDuration` that occurs when dealing with the 28th of February.](https://github.com/date-fns/date-fns/pull/2256) ([#2255](https://github.com/date-fns/date-fns/issues/2255))
### Added
- [Added new functions: `nextDay`, `nextMonday` and `nextTuesday` that allows getting the next day of the week, Monday or Tuesday respectively.](https://github.com/date-fns/date-fns/pull/2214)
## v2.18.0 - 2021-03-01
Thanks to [Tan75](http://github.com/tan75) and [Lesha Koss](http://github.com/leshakoss).
### Fixed
- [Fixed documentation missing for `intlFormat`.](https://github.com/date-fns/date-fns/pull/2259) ([#2258](https://github.com/date-fns/date-fns/issues/2258))
- [Fixed date formats in the Latvian locale.](https://github.com/date-fns/date-fns/pull/2205) ([#2202](https://github.com/date-fns/date-fns/issues/2202))
### Added
- [Added support of positive and negative offsets in `parseJSON`.](https://github.com/date-fns/date-fns/pull/2200) ([#2149](https://github.com/date-fns/date-fns/issues/2149))
## [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 is 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 last but not the least [@leshakoss](https://github.com/leshakoss)!
### Fixed
- [Set start of the week to 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
- Fixed 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)
- Fixed `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).
- Fixed a few bugs that appeared 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.
- Fixed 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, Sa, Su |
| 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, Sa, Su |
| 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, Sa, Su |
| 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, Sa, Su |
| 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 parses 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 of 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 will throw `TypeError` exception if so.
- **BREAKING**: all functions that accept numbers as arguments, now coerce
values using `Number()` and also round off decimals. Positive decimals are
rounded using `Math.floor`, decimals less than zero are rounded using
`Math.ceil`.
- **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](https://date-fns.org/docs/FP-Guide) 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).
- [Added 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)!
- [Added 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.
- [Fixed 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
- [Improved 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
- Fixed 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))
- Added `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
- Fixed 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
- Fixed 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)
- Fixed 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
- Fixed 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
- Fixed `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
- Fixed 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
- Fixed `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
- Fixed 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))
- Added 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/date-fns/date-fns/pull/294)
(thanks to Mateusz Derks [@ertrzyiks](https://github.com/ertrzyiks))
- [Portuguese locale (pt)](https://github.com/date-fns/date-fns/pull/316)
(thanks to Dário Freire [@dfreire](https://github.com/dfreire))
- [Swedish locale (sv)](https://github.com/date-fns/date-fns/pull/311)
(thanks to Johannes Ulén [@ejulen](https://github.com/ejulen))
- [French locale (fr)](https://github.com/date-fns/date-fns/pull/281)
(thanks to Jean Dupouy [@izeau](https://github.com/izeau))
- Performance tests. See PR: [#289](https://github.com/date-fns/date-fns/pull/289)
### Fixed
- Fixed TypeScript and flow typings for `isValid`.
See PR: [#310](https://github.com/date-fns/date-fns/pull/310)
- Fixed incorrect locale tests that could potentially lead to `format` bugs.
Kudos to Mateusz Derks [@ertrzyiks](https://github.com/ertrzyiks).
See related PRs: [#312](https://github.com/date-fns/date-fns/pull/312),
[#320](https://github.com/date-fns/date-fns/pull/320)
- Minor language fixes in the documentation.
Thanks to Vedad Šoše [@vedadsose](https://github.com/vedadsose) ([#314](https://github.com/date-fns/date-fns/pull/314))
and Asia [@asia-t](https://github.com/asia-t) ([#318](https://github.com/date-fns/date-fns/pull/318))
### Changed
- `format` now returns `String('Invalid Date')` if the passed date is invalid.
See PR: [#323](https://github.com/date-fns/date-fns/pull/323)
- `distanceInWords`, `distanceInWordsToNow`, `distanceInWordsStrict` and `format` functions now
check if the passed locale is valid, and fallback to English locale otherwise.
See PR: [#321](https://github.com/date-fns/date-fns/pull/321)
- _Internal_: use a loop instead of `Object.keys` in `buildFormattingTokensRegExp`
to improve compatibility with older browsers.
See PR: [#322](https://github.com/date-fns/date-fns/pull/322)
## [1.16.0] - 2016-12-08
### Added
- [Italian locale (it)](https://github.com/date-fns/date-fns/pull/298)
(thanks to Alberto Restifo [@albertorestifo](https://github.com/albertorestifo))
- For German `buildDistanceInWordsLocale`, add nominative case translations (for distances without a suffix).
Kudos to Asia [@asia-t](https://github.com/asia-t).
See related PR: [#295](https://github.com/date-fns/date-fns/pull/295)
## [1.15.1] - 2016-12-07
### Fixed
- Fixed TypeScript imports from individual modules.
Thanks to [@mattlewis92](https://github.com/mattlewis92).
See related PR: [#287](https://github.com/date-fns/date-fns/pull/287)
## [1.15.0] - 2016-12-07
### Added
- [Indonesian locale (id)](https://github.com/date-fns/date-fns/pull/299)
(thanks to Rahmat Budiharso [@rbudiharso](https://github.com/rbudiharso))
- [Catalan locale (ca)](https://github.com/date-fns/date-fns/pull/300)
(thanks to Guillermo Grau [@guigrpa](https://github.com/guigrpa))
### Fixed
- Fixed some inaccuracies in Spanish locale.
Kudos to [@guigrpa](https://github.com/guigrpa).
See related PR: [#302](https://github.com/date-fns/date-fns/pull/302)
## [1.14.1] - 2016-12-06
### Fixed
- Fixed broken test for Norwegian Bokmål locale.
## [1.14.0] - 2016-12-06
### Added
- [Norwegian Bokmål locale (nb)](https://github.com/date-fns/date-fns/pull/291)
(thanks to Hans-Kristian Koren [@Hanse](https://github.com/Hanse))
## [1.13.0] - 2016-12-06
### Added
- [Chinese Traditional locale (zh_tw)](https://github.com/date-fns/date-fns/pull/283)
(thanks to tonypai [@tpai](https://github.com/tpai)).
- [Dutch language locale (nl)](https://github.com/date-fns/date-fns/pull/278)
(kudos to Jorik Tangelder [@jtangelder](https://github.com/jtangelder))
## [1.12.1] - 2016-12-05
### Fixed
- Added `distanceInWordsStrict` to the list of supported functions in I18n doc.
## [1.12.0] - 2016-12-05
### Added
- [Spanish language locale (es)](https://github.com/date-fns/date-fns/pull/269)
(thanks to Juan Angosto [@juanangosto](https://github.com/juanangosto)).
### Fixed
- Fixed flow typings for some of the functions.
See PR: [#273](https://github.com/date-fns/date-fns/pull/273)
## [1.11.2] - 2016-11-28
### Fixed
- Bug in `parse` when it sometimes parses ISO week-numbering dates incorrectly.
See PR: [#262](https://github.com/date-fns/date-fns/pull/262)
- Bug in some functions which caused them to handle dates earlier than 100 AD incorrectly.
See PR: [#263](https://github.com/date-fns/date-fns/pull/263)
## [1.11.1] - 2016-11-24
### Fixed
- Include TypeScript typings with npm package.
## [1.11.0] - 2016-11-23
### Added
- `distanceInWordsStrict`.
Kudos to [@STRML](https://github.com/STRML).
See related PR: [#254](https://github.com/date-fns/date-fns/pull/254)
- [TypeScript](https://www.typescriptlang.org/) typings for all functions.
Kudos to [@mattlewis92](https://github.com/mattlewis92).
See related PR: [#255](https://github.com/date-fns/date-fns/pull/255)
## [1.10.0] - 2016-11-01
### Added
- `parse` now can parse dates that are ISO 8601 centuries (e.g., `19` and `+0019`).
```javascript
var result = parse('19')
//=> Mon Jan 01 1900 00:00:00
```
- In `parse`, added ability to specify the number of additional digits
for extended year or century format (possible values are 0, 1 or 2; default is 2).
```javascript
parse('+002016-11-01')
parse('+02016-11-01', { additionalDigits: 1 })
parse('+2016-11-01', { additionalDigits: 0 })
```
## [1.9.0] - 2016-10-25
### Added
- Got index.js imports to work with SystemJS.
## [1.8.1] - 2016-10-24
### Fixed
- Added Japanese and German language locales to the list in I18n doc.
## [1.8.0] - 2016-10-23
### Added
- [Japanese language locale (ja)](https://github.com/date-fns/date-fns/pull/241)
(thanks to Thomas Eilmsteiner [@DeMuu](https://github.com/DeMuu) again!)
- `getISODay`
- `setISODay`
## [1.7.0] - 2016-10-20
### Added
- [German language locale (de)](https://github.com/date-fns/date-fns/pull/237)
(thanks to Thomas Eilmsteiner [@DeMuu](https://github.com/DeMuu)).
## [1.6.0] - 2016-10-16
### Added
- [Chinese Simplified locale (zh_cn)](https://github.com/date-fns/date-fns/pull/235)
(kudos to Changyu [@KingMario](https://github.com/KingMario) Geng).
## [1.5.2] - 2016-10-13
### Fixed
- Incorrectly generated docs for `format`.
- Fixed typo in I18n doc.
## [1.5.1] - 2016-10-12
### Fixed
- A change log entry for [1.5.0] is added.
## [1.5.0] - 2016-10-12
### Added
- [The initial I18n support](https://date-fns.org/docs/I18n)
## [1.4.0] - 2016-10-09
### Added
- Basic [SystemJS](https://github.com/systemjs/systemjs) support.
### Fixed
- Fixed incorrect behaviour of `YYYY` and `YY` for years prior to 1000:
now `format(new Date('0001-01-01'), 'YYYY-MM-DD')` returns `0001-01-01`
instead of `1-01-01`.
## [1.3.0] - 2016-05-26
### Added
- `closestIndexTo`
## [1.2.0] - 2016-05-23
### Added
- Added an ability to pass negative numbers to `setDay`.
## [1.1.1] - 2016-05-19
### Fixed
- Fixed [Flow](http://flowtype.org/) declarations for some of the functions.
## [1.1.0] - 2016-05-19
### Added
- [Flow](http://flowtype.org/) declarations for each function
in [the ".js.flow" style](http://flowtype.org/docs/declarations.html#declaration-files).
Kudos to [@JohnyDays](https://github.com/JohnyDays). See related PRs:
- [#205](https://github.com/date-fns/date-fns/pull/205)
- [#207](https://github.com/date-fns/date-fns/pull/207)
## [1.0.0] - 2016-05-18
### Fixed
- `format` now returns the correct result for key `E`.
- Prevent `startOf...`, `endOf...` and `lastDayOf...` functions
to return dates with an incorrect time when the date is modifying
into another time zone.
- `parse` now parses years from 1 AD to 99 AD correctly.
- Fix a bug in `getISOWeek` appearing because of a changing time zone
(e.g., when the given date is in DST and the start of the ISO year is not).
### Changed
- **BREAKING**: all functions are moved to the root of the library, so they
are now accessible with `require('date-fns/name_of_function')` or
`import nameOfFunction from 'date-fns/name_of_function'`.
```javascript
// Before v1.0.0
var addMonths = require('date-fns/src/add_months')
// v1.0.0 onward
var addMonths = require('date-fns/add_months')
```
- **BREAKING**: functions that had the last optional argument `weekStartsAt`
(i.e. `endOfWeek`, `isSameWeek`, `lastDayOfWeek`, `setDay`, `startOfWeek`)
now instead receive the object `options` with the property `options.weekStartsOn`
as the last argument.
```javascript
// Before v1.0.0
var result = endOfWeek(new Date(2014, 8, 2), 1)
// v1.0.0 onward
var result = endOfWeek(new Date(2014, 8, 2), { weekStartsOn: 1 })
```
- **BREAKING**: remove the function `getTimeSinceMidnight` that was used inside
the other functions.
- **BREAKING**: `differenceInDays` now returns the number of full days instead
of calendar days.
- **BREAKING**: `eachDay` and `isWithinRange` now throw an exception
when the given range boundaries are invalid.
- Faster `isLeapYear`.
- _Internal_: make the documentation more verbose.
- _Internal_: convert the tests from Chai to power-assert allowing them
to run against IE8.
### Added
- `addISOYears`
- `closestTo`
- `differenceInCalendarDays`
- `differenceInCalendarISOWeeks`
- `differenceInCalendarISOYears`
- `differenceInCalendarMonths`
- `differenceInCalendarQuarters`
- `differenceInCalendarWeeks`
- `differenceInCalendarYears`
- `differenceInHours`
- `differenceInISOYears`
- `differenceInMilliseconds`
- `differenceInMinutes`
- `differenceInMonths`
- `differenceInQuarters`
- `differenceInSeconds`
- `differenceInWeeks`
- `differenceInYears`
- `distanceInWords`
- `distanceInWordsToNow`
- `endOfISOWeek`
- `endOfISOYear`
- `endOfToday`
- `endOfTomorrow`
- `endOfYesterday`
- `getDaysInYear`
- `isDate`
- `isFriday`
- `isMonday`
- `isSameISOWeek`
- `isSameISOYear`
- `isSaturday`
- `isSunday`
- `isThisHour`
- `isThisISOWeek`
- `isThisISOYear`
- `isThisMinute`
- `isThisMonth`
- `isThisQuarter`
- `isThisSecond`
- `isThisWeek`
- `isThisYear`
- `isThursday`
- `isTomorrow`
- `isTuesday`
- `isValid`
- `isWednesday`
- `isYesterday`
- `lastDayOfISOWeek`
- `lastDayOfISOYear`
- `startOfISOWeek`
- `startOfToday`
- `startOfTomorrow`
- `startOfYesterday`
- `subISOYears`
- Add `Qo`, `W`, `Wo`, `WW`, `GG`, `GGGG`, `Z`, `ZZ`, `X`, `x` keys to `format`.
## [0.17.0] - 2015-09-29
### Fixed
- Fixed a lot of bugs appearing when date is modifying into other time zone
(e.g., when adding months and original date is in DST but new date is not).
- Prevent instances of Date to lose milliseconds value when passed to.
`parse` in IE10.
### Changed
- `setISOWeek` now keeps time from original date.
- _Internal_: reuse `getDaysInMonth` inside of `addMonths`.
### Added
- `differenceInDays`
- `getTimeSinceMidnight`
- `format` now has new format key `aa`, which returns `a.m.`/`p.m.`
as opposed to `a` that returns `am`/`pm`.
- Complete UMD package (for Bower and CDN).
## [0.16.0] - 2015-09-01
### Changed
- Use `parse` to clean date arguments in all functions.
- `parse` now fallbacks to `new Date` when the argument
is not an ISO formatted date.
- _Internal_: reuse `getDaysInMonth` inside of `setMonth`.
### Added
- `addQuarters`
- `addWeeks`
- `endOfQuarter`
- `getDate`
- `getDay`
- `getDaysInMonth`
- `getHours`
- `getISOWeeksInYear`
- `getMilliseconds`
- `getMinutes`
- `getMonth`
- `getSeconds`
- `getYear`
- `isLeapYear`
- `isSameHour`
- `isSameMinute`
- `isSameQuarter`
- `isSameSecond`
- `lastDayOfQuarter`
- `lastDayOfWeek`
- `max`
- `min`
- `setDate`
- `setDay`
- `setHours`
- `setMilliseconds`
- `setMinutes`
- `setSeconds`
- `startOfQuarter`
- `subQuarters`
- `subWeeks`
## [0.15.0] - 2015-08-26
### Changed
- `format` now returns `a.m.`/`p.m.` instead of `am`/`pm`.
- `setMonth` now sets last day of month if original date was last day
of longer month.
- _Internal_: Fix code style according to ESLint.
- _Internal_: Make tests run through all time zones.
### Added
- `getQuarter`
- `setQuarter`
- `getDayOfYear`
- `setDayOfYear`
- `isPast`
- `addSeconds`
- `subSeconds`
- `startOfSecond`
- `endOfSecond`
- `startOfMinute`
- `endOfMinute`
- `addMilliseconds`
- `subMilliseconds`
- `endOfYear`
- `addYears`
- `subYears`
- `lastDayOfYear`
- `lastDayOfMonth`
## [0.14.11] - 2015-08-21
### Fixed
- `format` now uses `parse` to avoid time zone bugs.
### Changed
- `setIsoWeek` now sets time to the start of the day.
## [0.14.10] - 2015-07-29
### Fixed
- `format` now behaves correctly with 12:00 am.
- `format` now behaves correctly with ordinal numbers.
### Added
- `compareAsc`
- `compareDesc`
- `addHours`
- `subHours`
- `isSameDay`
- `parse`
- `getISOYear`
- `setISOYear`
- `startOfISOYear`
- `getISOWeek`
- `setISOWeek`
## [0.14.9] - 2015-01-14
### Fixed
- `addMonths` now correctly behaves with February
(see [#18](https://github.com/js-fns/date-fns/pull/18)).
## [0.14.8] - 2014-12-25
### Fixed
- `format` function now behaves correctly with `pm`/`am`.
## [0.14.6] - 2014-12-04
### Fixed
- Fix broken Bower support.
## [0.14.0] - 2014-11-05
### Added
- Bower package.
## [0.13.0] - 2014-10-22
### Added
- `addMinutes`
- `subMinutes`
- `isEqual`
- `isBefore`
- `isAfter`
## [0.12.1] - 2014-10-19
### Fixed
- Incorrect rounding in `DDD` formatter.
## [0.12.0] - 2014-10-15
### Added
- `isSameYear`
## [0.11.0] - 2014-10-15
### Added
- `isWithinRange`
## [0.10.0] - 2014-10-13
### Added
- `format`
- `startOfYear`
## [0.9.0] - 2014-10-10
### Changed
- _Internal_: simplify `isWeekend`
### Added
- `isFuture`
## [0.8.0] - 2014-10-09
### Changed
- _Internal_: reuse `addDays` inside of `subDays`.
### Added
- `addMonths`
- `subMonths`
- `setMonth`
- `setYear`
## [0.7.0] - 2014-10-08
### Added
- `isSameWeek`
## [0.6.0] - 2014-10-07
### Fixed
- Inconsistent behavior of `endOfMonth`.
### Added
- `isFirstDayOfMonth`
- `isLastDayOfMonth`
- `isSameMonth`
## [0.5.0] - 2014-10-07
### Added
- `addDays`
- `subDays`
## [0.4.0] - 2014-10-07
### Added
- `startOfWeek`
- `endOfWeek`
- `eachDay`
## [0.3.0] - 2014-10-06
### Changed
- `startOfDay` now sets milliseconds as well.
### Added
- `endOfDay`
- `startOfMonth`
- `endOfMonth`
## [0.2.0] - 2014-10-06
### Added
- `isToday`
- `isWeekend`
## 0.1.0 - 2014-10-06
### Added
- `startOfDay`
[unreleased]: https://github.com/date-fns/date-fns/compare/v2.16.1...HEAD
[2.16.1]: https://github.com/date-fns/date-fns/compare/v2.16.0...v2.16.1
[2.16.0]: https://github.com/date-fns/date-fns/compare/v2.15.0...v2.16.0
[2.15.0]: https://github.com/date-fns/date-fns/compare/v2.14.0...v2.15.0
[2.14.0]: https://github.com/date-fns/date-fns/compare/v2.13.0...v2.14.0
[2.13.0]: https://github.com/date-fns/date-fns/compare/v2.12.0...v2.13.0
[2.12.0]: https://github.com/date-fns/date-fns/compare/v2.11.1...v2.12.0
[2.11.1]: https://github.com/date-fns/date-fns/compare/v2.11.0...v2.11.1
[2.11.0]: https://github.com/date-fns/date-fns/compare/v2.10.0...v2.11.0
[2.10.0]: https://github.com/date-fns/date-fns/compare/v2.9.0...v2.10.0
[2.9.0]: https://github.com/date-fns/date-fns/compare/v2.8.1...v2.9.0
[2.8.1]: https://github.com/date-fns/date-fns/compare/v2.8.0...v2.8.1
[2.8.0]: https://github.com/date-fns/date-fns/compare/v2.7.0...v2.8.0
[2.7.0]: https://github.com/date-fns/date-fns/compare/v2.6.0...v2.7.0
[2.6.0]: https://github.com/date-fns/date-fns/compare/v2.5.1...v2.6.0
[2.5.1]: https://github.com/date-fns/date-fns/compare/v2.5.0...v2.5.1
[2.5.0]: https://github.com/date-fns/date-fns/compare/v2.4.1...v2.5.0
[2.4.1]: https://github.com/date-fns/date-fns/compare/v2.4.0...v2.4.1
[2.4.0]: https://github.com/date-fns/date-fns/compare/v2.3.0...v2.4.0
[2.3.0]: https://github.com/date-fns/date-fns/compare/v2.2.1...v2.3.0
[2.2.1]: https://github.com/date-fns/date-fns/compare/v2.1.0...v2.2.1
[2.1.0]: https://github.com/date-fns/date-fns/compare/v2.0.1...v2.1.0
[2.0.1]: https://github.com/date-fns/date-fns/compare/v2.0.0...v2.0.1
[2.0.0]: https://github.com/date-fns/date-fns/compare/v1.28.5...v2.0.0
[1.28.5]: https://github.com/date-fns/date-fns/compare/v1.28.4...v1.28.5
[1.28.4]: https://github.com/date-fns/date-fns/compare/v1.28.3...v1.28.4
[1.28.3]: https://github.com/date-fns/date-fns/compare/v1.28.2...v1.28.3
[1.28.2]: https://github.com/date-fns/date-fns/compare/v1.28.1...v1.28.2
[1.28.1]: https://github.com/date-fns/date-fns/compare/v1.28.0...v1.28.1
[1.28.0]: https://github.com/date-fns/date-fns/compare/v1.27.2...v1.28.0
[1.27.2]: https://github.com/date-fns/date-fns/compare/v1.27.1...v1.27.2
[1.27.1]: https://github.com/date-fns/date-fns/compare/v1.27.0...v1.27.1
[1.27.0]: https://github.com/date-fns/date-fns/compare/v1.26.0...v1.27.0
[1.26.0]: https://github.com/date-fns/date-fns/compare/v1.25.0...v1.26.0
[1.25.0]: https://github.com/date-fns/date-fns/compare/v1.24.0...v1.25.0
[1.24.0]: https://github.com/date-fns/date-fns/compare/v1.23.0...v1.24.0
[1.23.0]: https://github.com/date-fns/date-fns/compare/v1.22.0...v1.23.0
[1.22.0]: https://github.com/date-fns/date-fns/compare/v1.21.1...v1.22.0
[1.21.1]: https://github.com/date-fns/date-fns/compare/v1.21.0...v1.21.1
[1.21.0]: https://github.com/date-fns/date-fns/compare/v1.20.1...v1.21.0
[1.20.1]: https://github.com/date-fns/date-fns/compare/v1.20.0...v1.20.1
[1.20.0]: https://github.com/date-fns/date-fns/compare/v1.19.0...v1.20.0
[1.19.0]: https://github.com/date-fns/date-fns/compare/v1.18.0...v1.19.0
[1.18.0]: https://github.com/date-fns/date-fns/compare/v1.17.0...v1.18.0
[1.17.0]: https://github.com/date-fns/date-fns/compare/v1.16.0...v1.17.0
[1.16.0]: https://github.com/date-fns/date-fns/compare/v1.15.1...v1.16.0
[1.15.1]: https://github.com/date-fns/date-fns/compare/v1.15.0...v1.15.1
[1.15.0]: https://github.com/date-fns/date-fns/compare/v1.14.1...v1.15.0
[1.14.1]: https://github.com/date-fns/date-fns/compare/v1.14.0...v1.14.1
[1.14.0]: https://github.com/date-fns/date-fns/compare/v1.13.0...v1.14.0
[1.13.0]: https://github.com/date-fns/date-fns/compare/v1.12.1...v1.13.0
[1.12.1]: https://github.com/date-fns/date-fns/compare/v1.12.0...v1.12.1
[1.12.0]: https://github.com/date-fns/date-fns/compare/v1.11.2...v1.12.0
[1.11.2]: https://github.com/date-fns/date-fns/compare/v1.11.1...v1.11.2
[1.11.1]: https://github.com/date-fns/date-fns/compare/v1.11.0...v1.11.1
[1.11.0]: https://github.com/date-fns/date-fns/compare/v1.10.0...v1.11.0
[1.10.0]: https://github.com/date-fns/date-fns/compare/v1.9.0...v1.10.0
[1.9.0]: https://github.com/date-fns/date-fns/compare/v1.8.1...v1.9.0
[1.8.1]: https://github.com/date-fns/date-fns/compare/v1.8.0...v1.8.1
[1.8.0]: https://github.com/date-fns/date-fns/compare/v1.7.0...v1.8.0
[1.7.0]: https://github.com/date-fns/date-fns/compare/v1.6.0...v1.7.0
[1.6.0]: https://github.com/date-fns/date-fns/compare/v1.5.2...v1.6.0
[1.5.2]: https://github.com/date-fns/date-fns/compare/v1.5.1...v1.5.2
[1.5.1]: https://github.com/date-fns/date-fns/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/date-fns/date-fns/compare/v1.4.0...v1.5.0
[1.4.0]: https://github.com/date-fns/date-fns/compare/v1.3.0...v1.4.0
[1.3.0]: https://github.com/date-fns/date-fns/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/date-fns/date-fns/compare/v1.1.1...v1.2.0
[1.1.1]: https://github.com/date-fns/date-fns/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/date-fns/date-fns/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/date-fns/date-fns/compare/v0.17.0...v1.0.0
[0.17.0]: https://github.com/date-fns/date-fns/compare/v0.16.0...v0.17.0
[0.16.0]: https://github.com/date-fns/date-fns/compare/v0.15.0...v0.16.0
[0.15.0]: https://github.com/date-fns/date-fns/compare/v0.14.11...v0.15.0
[0.14.11]: https://github.com/date-fns/date-fns/compare/v0.14.10...v0.14.11
[0.14.10]: https://github.com/date-fns/date-fns/compare/v0.14.9...v0.14.10
[0.14.9]: https://github.com/date-fns/date-fns/compare/v0.14.8...v0.14.9
[0.14.8]: https://github.com/date-fns/date-fns/compare/v0.14.6...v0.14.8
[0.14.6]: https://github.com/date-fns/date-fns/compare/v0.14.0...v0.14.6
[0.14.0]: https://github.com/date-fns/date-fns/compare/v0.13.0...v0.14.0
[0.13.0]: https://github.com/date-fns/date-fns/compare/v0.12.1...v0.13.0
[0.12.1]: https://github.com/date-fns/date-fns/compare/v0.12.0...v0.12.1
[0.12.0]: https://github.com/date-fns/date-fns/compare/v0.11.0...v0.12.0
[0.11.0]: https://github.com/date-fns/date-fns/compare/v0.10.0...v0.11.0
[0.10.0]: https://github.com/date-fns/date-fns/compare/v0.9.0...v0.10.0
[0.9.0]: https://github.com/date-fns/date-fns/compare/v0.8.0...v0.9.0
[0.8.0]: https://github.com/date-fns/date-fns/compare/v0.7.0...v0.8.0
[0.7.0]: https://github.com/date-fns/date-fns/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/date-fns/date-fns/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/date-fns/date-fns/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/date-fns/date-fns/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/date-fns/date-fns/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/date-fns/date-fns/compare/v0.1.0...v0.2.0
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Sasha Koss and Lesha Koss https://kossnocorp.mit-license.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+69
View File
@@ -0,0 +1,69 @@
<p align="center">
<a href="https://date-fns.org/">
<img alt="date-fns" title="date-fns" src="https://raw.githubusercontent.com/date-fns/date-fns/master/docs/logotype.svg" width="300" />
</a>
</p>
<p align="center">
<b>date-fns</b> provides the most comprehensive, yet simple and consistent toolset
<br>
for manipulating <b>JavaScript dates</b> in <b>a browser</b> & <b>Node.js</b>.</b>
</p>
<div align="center">
[📖&nbsp; Documentation](https://date-fns.org/docs/Getting-Started/)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[🧑‍💻&nbsp; JavaScript Jobs](https://jobs.date-fns.org/)
</div>
<hr>
# It's like [Lodash](https://lodash.com) for dates
- It has [**200+ functions** for all occasions](https://date-fns.org/docs/Getting-Started/).
- **Modular**: Pick what you need. Works with webpack, Browserify, or Rollup and also supports tree-shaking.
- **Native dates**: Uses existing native type. It doesn't extend core objects for safety's sake.
- **Immutable & Pure**: Built using pure functions and always returns a new date instance.
- **TypeScript & Flow**: Supports both Flow and TypeScript
- **I18n**: Dozens of locales. Include only what you need.
- [and many more benefits](https://date-fns.org/)
```js
import { compareAsc, format } from 'date-fns'
format(new Date(2014, 1, 11), 'yyyy-MM-dd')
//=> '2014-02-11'
const dates = [
new Date(1995, 6, 2),
new Date(1987, 1, 11),
new Date(1989, 6, 10),
]
dates.sort(compareAsc)
//=> [
// Wed Feb 11 1987 00:00:00,
// Mon Jul 10 1989 00:00:00,
// Sun Jul 02 1995 00:00:00
// ]
```
The library is available as an [npm package](https://www.npmjs.com/package/date-fns).
To install the package run:
```bash
npm install date-fns --save
# or with yarn
yarn add date-fns
```
## Docs
[See date-fns.org](https://date-fns.org/) for more details, API,
and other docs.
<br />
<!-- END OF README-JOB SECTION -->
## License
[MIT © Sasha Koss](https://kossnocorp.mit-license.org/)
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addLeadingZeros;
function addLeadingZeros(number, targetLength) {
var sign = number < 0 ? '-' : '';
var output = Math.abs(number).toString();
while (output.length < targetLength) {
output = '0' + output;
}
return sign + output;
}
module.exports = exports.default;
+19
View File
@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = assign;
function assign(target, object) {
if (target == null) {
throw new TypeError('assign requires that input parameter not be null or undefined');
}
for (var property in object) {
if (Object.prototype.hasOwnProperty.call(object, property)) {
;
target[property] = object[property];
}
}
return target;
}
module.exports = exports.default;
+12
View File
@@ -0,0 +1,12 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = cloneObject;
var _index = _interopRequireDefault(require("../assign/index.js"));
function cloneObject(object) {
return (0, _index.default)({}, object);
}
module.exports = exports.default;
+11
View File
@@ -0,0 +1,11 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _index = _interopRequireDefault(require("../../locale/en-US/index.js"));
var _default = _index.default;
exports.default = _default;
module.exports = exports.default;
+14
View File
@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDefaultOptions = getDefaultOptions;
exports.setDefaultOptions = setDefaultOptions;
var defaultOptions = {};
function getDefaultOptions() {
return defaultOptions;
}
function setDefaultOptions(newOptions) {
defaultOptions = newOptions;
}
+781
View File
@@ -0,0 +1,781 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _index = _interopRequireDefault(require("../../../_lib/getUTCDayOfYear/index.js"));
var _index2 = _interopRequireDefault(require("../../../_lib/getUTCISOWeek/index.js"));
var _index3 = _interopRequireDefault(require("../../../_lib/getUTCISOWeekYear/index.js"));
var _index4 = _interopRequireDefault(require("../../../_lib/getUTCWeek/index.js"));
var _index5 = _interopRequireDefault(require("../../../_lib/getUTCWeekYear/index.js"));
var _index6 = _interopRequireDefault(require("../../addLeadingZeros/index.js"));
var _index7 = _interopRequireDefault(require("../lightFormatters/index.js"));
var dayPeriodEnum = {
am: 'am',
pm: 'pm',
midnight: 'midnight',
noon: 'noon',
morning: 'morning',
afternoon: 'afternoon',
evening: 'evening',
night: 'night'
};
/*
* | | Unit | | Unit |
* |-----|--------------------------------|-----|--------------------------------|
* | a | AM, PM | A* | Milliseconds in day |
* | b | AM, PM, noon, midnight | B | Flexible day period |
* | c | Stand-alone local day of week | C* | Localized hour w/ day period |
* | d | Day of month | D | Day of year |
* | e | Local day of week | E | Day of week |
* | f | | F* | Day of week in month |
* | g* | Modified Julian day | G | Era |
* | h | Hour [1-12] | H | Hour [0-23] |
* | i! | ISO day of week | I! | ISO week of year |
* | j* | Localized hour w/ day period | J* | Localized hour w/o day period |
* | k | Hour [1-24] | K | Hour [0-11] |
* | l* | (deprecated) | L | Stand-alone month |
* | m | Minute | M | Month |
* | n | | N | |
* | o! | Ordinal number modifier | O | Timezone (GMT) |
* | p! | Long localized time | P! | Long localized date |
* | q | Stand-alone quarter | Q | Quarter |
* | r* | Related Gregorian year | R! | ISO week-numbering year |
* | s | Second | S | Fraction of second |
* | t! | Seconds timestamp | T! | Milliseconds timestamp |
* | u | Extended year | U* | Cyclic year |
* | v* | Timezone (generic non-locat.) | V* | Timezone (location) |
* | w | Local week of year | W* | Week of month |
* | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |
* | y | Year (abs) | Y | Local week-numbering year |
* | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |
*
* Letters marked by * are not implemented but reserved by Unicode standard.
*
* Letters marked by ! are non-standard, but implemented by date-fns:
* - `o` modifies the previous token to turn it into an ordinal (see `format` docs)
* - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
* i.e. 7 for Sunday, 1 for Monday, etc.
* - `I` is ISO week of year, as opposed to `w` which is local week of year.
* - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
* `R` is supposed to be used in conjunction with `I` and `i`
* for universal ISO week-numbering date, whereas
* `Y` is supposed to be used in conjunction with `w` and `e`
* for week-numbering date specific to the locale.
* - `P` is long localized date format
* - `p` is long localized time format
*/
var formatters = {
// Era
G: function G(date, token, localize) {
var era = date.getUTCFullYear() > 0 ? 1 : 0;
switch (token) {
// AD, BC
case 'G':
case 'GG':
case 'GGG':
return localize.era(era, {
width: 'abbreviated'
});
// A, B
case 'GGGGG':
return localize.era(era, {
width: 'narrow'
});
// Anno Domini, Before Christ
case 'GGGG':
default:
return localize.era(era, {
width: 'wide'
});
}
},
// Year
y: function y(date, token, localize) {
// Ordinal number
if (token === 'yo') {
var signedYear = date.getUTCFullYear();
// Returns 1 for 1 BC (which is year 0 in JavaScript)
var year = signedYear > 0 ? signedYear : 1 - signedYear;
return localize.ordinalNumber(year, {
unit: 'year'
});
}
return _index7.default.y(date, token);
},
// Local week-numbering year
Y: function Y(date, token, localize, options) {
var signedWeekYear = (0, _index5.default)(date, options);
// Returns 1 for 1 BC (which is year 0 in JavaScript)
var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;
// Two digit year
if (token === 'YY') {
var twoDigitYear = weekYear % 100;
return (0, _index6.default)(twoDigitYear, 2);
}
// Ordinal number
if (token === 'Yo') {
return localize.ordinalNumber(weekYear, {
unit: 'year'
});
}
// Padding
return (0, _index6.default)(weekYear, token.length);
},
// ISO week-numbering year
R: function R(date, token) {
var isoWeekYear = (0, _index3.default)(date);
// Padding
return (0, _index6.default)(isoWeekYear, token.length);
},
// Extended year. This is a single number designating the year of this calendar system.
// The main difference between `y` and `u` localizers are B.C. years:
// | Year | `y` | `u` |
// |------|-----|-----|
// | AC 1 | 1 | 1 |
// | BC 1 | 1 | 0 |
// | BC 2 | 2 | -1 |
// Also `yy` always returns the last two digits of a year,
// while `uu` pads single digit years to 2 characters and returns other years unchanged.
u: function u(date, token) {
var year = date.getUTCFullYear();
return (0, _index6.default)(year, token.length);
},
// Quarter
Q: function Q(date, token, localize) {
var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
switch (token) {
// 1, 2, 3, 4
case 'Q':
return String(quarter);
// 01, 02, 03, 04
case 'QQ':
return (0, _index6.default)(quarter, 2);
// 1st, 2nd, 3rd, 4th
case 'Qo':
return localize.ordinalNumber(quarter, {
unit: 'quarter'
});
// Q1, Q2, Q3, Q4
case 'QQQ':
return localize.quarter(quarter, {
width: 'abbreviated',
context: 'formatting'
});
// 1, 2, 3, 4 (narrow quarter; could be not numerical)
case 'QQQQQ':
return localize.quarter(quarter, {
width: 'narrow',
context: 'formatting'
});
// 1st quarter, 2nd quarter, ...
case 'QQQQ':
default:
return localize.quarter(quarter, {
width: 'wide',
context: 'formatting'
});
}
},
// Stand-alone quarter
q: function q(date, token, localize) {
var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
switch (token) {
// 1, 2, 3, 4
case 'q':
return String(quarter);
// 01, 02, 03, 04
case 'qq':
return (0, _index6.default)(quarter, 2);
// 1st, 2nd, 3rd, 4th
case 'qo':
return localize.ordinalNumber(quarter, {
unit: 'quarter'
});
// Q1, Q2, Q3, Q4
case 'qqq':
return localize.quarter(quarter, {
width: 'abbreviated',
context: 'standalone'
});
// 1, 2, 3, 4 (narrow quarter; could be not numerical)
case 'qqqqq':
return localize.quarter(quarter, {
width: 'narrow',
context: 'standalone'
});
// 1st quarter, 2nd quarter, ...
case 'qqqq':
default:
return localize.quarter(quarter, {
width: 'wide',
context: 'standalone'
});
}
},
// Month
M: function M(date, token, localize) {
var month = date.getUTCMonth();
switch (token) {
case 'M':
case 'MM':
return _index7.default.M(date, token);
// 1st, 2nd, ..., 12th
case 'Mo':
return localize.ordinalNumber(month + 1, {
unit: 'month'
});
// Jan, Feb, ..., Dec
case 'MMM':
return localize.month(month, {
width: 'abbreviated',
context: 'formatting'
});
// J, F, ..., D
case 'MMMMM':
return localize.month(month, {
width: 'narrow',
context: 'formatting'
});
// January, February, ..., December
case 'MMMM':
default:
return localize.month(month, {
width: 'wide',
context: 'formatting'
});
}
},
// Stand-alone month
L: function L(date, token, localize) {
var month = date.getUTCMonth();
switch (token) {
// 1, 2, ..., 12
case 'L':
return String(month + 1);
// 01, 02, ..., 12
case 'LL':
return (0, _index6.default)(month + 1, 2);
// 1st, 2nd, ..., 12th
case 'Lo':
return localize.ordinalNumber(month + 1, {
unit: 'month'
});
// Jan, Feb, ..., Dec
case 'LLL':
return localize.month(month, {
width: 'abbreviated',
context: 'standalone'
});
// J, F, ..., D
case 'LLLLL':
return localize.month(month, {
width: 'narrow',
context: 'standalone'
});
// January, February, ..., December
case 'LLLL':
default:
return localize.month(month, {
width: 'wide',
context: 'standalone'
});
}
},
// Local week of year
w: function w(date, token, localize, options) {
var week = (0, _index4.default)(date, options);
if (token === 'wo') {
return localize.ordinalNumber(week, {
unit: 'week'
});
}
return (0, _index6.default)(week, token.length);
},
// ISO week of year
I: function I(date, token, localize) {
var isoWeek = (0, _index2.default)(date);
if (token === 'Io') {
return localize.ordinalNumber(isoWeek, {
unit: 'week'
});
}
return (0, _index6.default)(isoWeek, token.length);
},
// Day of the month
d: function d(date, token, localize) {
if (token === 'do') {
return localize.ordinalNumber(date.getUTCDate(), {
unit: 'date'
});
}
return _index7.default.d(date, token);
},
// Day of year
D: function D(date, token, localize) {
var dayOfYear = (0, _index.default)(date);
if (token === 'Do') {
return localize.ordinalNumber(dayOfYear, {
unit: 'dayOfYear'
});
}
return (0, _index6.default)(dayOfYear, token.length);
},
// Day of week
E: function E(date, token, localize) {
var dayOfWeek = date.getUTCDay();
switch (token) {
// Tue
case 'E':
case 'EE':
case 'EEE':
return localize.day(dayOfWeek, {
width: 'abbreviated',
context: 'formatting'
});
// T
case 'EEEEE':
return localize.day(dayOfWeek, {
width: 'narrow',
context: 'formatting'
});
// Tu
case 'EEEEEE':
return localize.day(dayOfWeek, {
width: 'short',
context: 'formatting'
});
// Tuesday
case 'EEEE':
default:
return localize.day(dayOfWeek, {
width: 'wide',
context: 'formatting'
});
}
},
// Local day of week
e: function e(date, token, localize, options) {
var dayOfWeek = date.getUTCDay();
var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
switch (token) {
// Numerical value (Nth day of week with current locale or weekStartsOn)
case 'e':
return String(localDayOfWeek);
// Padded numerical value
case 'ee':
return (0, _index6.default)(localDayOfWeek, 2);
// 1st, 2nd, ..., 7th
case 'eo':
return localize.ordinalNumber(localDayOfWeek, {
unit: 'day'
});
case 'eee':
return localize.day(dayOfWeek, {
width: 'abbreviated',
context: 'formatting'
});
// T
case 'eeeee':
return localize.day(dayOfWeek, {
width: 'narrow',
context: 'formatting'
});
// Tu
case 'eeeeee':
return localize.day(dayOfWeek, {
width: 'short',
context: 'formatting'
});
// Tuesday
case 'eeee':
default:
return localize.day(dayOfWeek, {
width: 'wide',
context: 'formatting'
});
}
},
// Stand-alone local day of week
c: function c(date, token, localize, options) {
var dayOfWeek = date.getUTCDay();
var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
switch (token) {
// Numerical value (same as in `e`)
case 'c':
return String(localDayOfWeek);
// Padded numerical value
case 'cc':
return (0, _index6.default)(localDayOfWeek, token.length);
// 1st, 2nd, ..., 7th
case 'co':
return localize.ordinalNumber(localDayOfWeek, {
unit: 'day'
});
case 'ccc':
return localize.day(dayOfWeek, {
width: 'abbreviated',
context: 'standalone'
});
// T
case 'ccccc':
return localize.day(dayOfWeek, {
width: 'narrow',
context: 'standalone'
});
// Tu
case 'cccccc':
return localize.day(dayOfWeek, {
width: 'short',
context: 'standalone'
});
// Tuesday
case 'cccc':
default:
return localize.day(dayOfWeek, {
width: 'wide',
context: 'standalone'
});
}
},
// ISO day of week
i: function i(date, token, localize) {
var dayOfWeek = date.getUTCDay();
var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
switch (token) {
// 2
case 'i':
return String(isoDayOfWeek);
// 02
case 'ii':
return (0, _index6.default)(isoDayOfWeek, token.length);
// 2nd
case 'io':
return localize.ordinalNumber(isoDayOfWeek, {
unit: 'day'
});
// Tue
case 'iii':
return localize.day(dayOfWeek, {
width: 'abbreviated',
context: 'formatting'
});
// T
case 'iiiii':
return localize.day(dayOfWeek, {
width: 'narrow',
context: 'formatting'
});
// Tu
case 'iiiiii':
return localize.day(dayOfWeek, {
width: 'short',
context: 'formatting'
});
// Tuesday
case 'iiii':
default:
return localize.day(dayOfWeek, {
width: 'wide',
context: 'formatting'
});
}
},
// AM or PM
a: function a(date, token, localize) {
var hours = date.getUTCHours();
var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';
switch (token) {
case 'a':
case 'aa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
});
case 'aaa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
}).toLowerCase();
case 'aaaaa':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'narrow',
context: 'formatting'
});
case 'aaaa':
default:
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'wide',
context: 'formatting'
});
}
},
// AM, PM, midnight, noon
b: function b(date, token, localize) {
var hours = date.getUTCHours();
var dayPeriodEnumValue;
if (hours === 12) {
dayPeriodEnumValue = dayPeriodEnum.noon;
} else if (hours === 0) {
dayPeriodEnumValue = dayPeriodEnum.midnight;
} else {
dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';
}
switch (token) {
case 'b':
case 'bb':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
});
case 'bbb':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
}).toLowerCase();
case 'bbbbb':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'narrow',
context: 'formatting'
});
case 'bbbb':
default:
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'wide',
context: 'formatting'
});
}
},
// in the morning, in the afternoon, in the evening, at night
B: function B(date, token, localize) {
var hours = date.getUTCHours();
var dayPeriodEnumValue;
if (hours >= 17) {
dayPeriodEnumValue = dayPeriodEnum.evening;
} else if (hours >= 12) {
dayPeriodEnumValue = dayPeriodEnum.afternoon;
} else if (hours >= 4) {
dayPeriodEnumValue = dayPeriodEnum.morning;
} else {
dayPeriodEnumValue = dayPeriodEnum.night;
}
switch (token) {
case 'B':
case 'BB':
case 'BBB':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'abbreviated',
context: 'formatting'
});
case 'BBBBB':
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'narrow',
context: 'formatting'
});
case 'BBBB':
default:
return localize.dayPeriod(dayPeriodEnumValue, {
width: 'wide',
context: 'formatting'
});
}
},
// Hour [1-12]
h: function h(date, token, localize) {
if (token === 'ho') {
var hours = date.getUTCHours() % 12;
if (hours === 0) hours = 12;
return localize.ordinalNumber(hours, {
unit: 'hour'
});
}
return _index7.default.h(date, token);
},
// Hour [0-23]
H: function H(date, token, localize) {
if (token === 'Ho') {
return localize.ordinalNumber(date.getUTCHours(), {
unit: 'hour'
});
}
return _index7.default.H(date, token);
},
// Hour [0-11]
K: function K(date, token, localize) {
var hours = date.getUTCHours() % 12;
if (token === 'Ko') {
return localize.ordinalNumber(hours, {
unit: 'hour'
});
}
return (0, _index6.default)(hours, token.length);
},
// Hour [1-24]
k: function k(date, token, localize) {
var hours = date.getUTCHours();
if (hours === 0) hours = 24;
if (token === 'ko') {
return localize.ordinalNumber(hours, {
unit: 'hour'
});
}
return (0, _index6.default)(hours, token.length);
},
// Minute
m: function m(date, token, localize) {
if (token === 'mo') {
return localize.ordinalNumber(date.getUTCMinutes(), {
unit: 'minute'
});
}
return _index7.default.m(date, token);
},
// Second
s: function s(date, token, localize) {
if (token === 'so') {
return localize.ordinalNumber(date.getUTCSeconds(), {
unit: 'second'
});
}
return _index7.default.s(date, token);
},
// Fraction of second
S: function S(date, token) {
return _index7.default.S(date, token);
},
// Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
X: function X(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
if (timezoneOffset === 0) {
return 'Z';
}
switch (token) {
// Hours and optional minutes
case 'X':
return formatTimezoneWithOptionalMinutes(timezoneOffset);
// Hours, minutes and optional seconds without `:` delimiter
// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
// so this token always has the same output as `XX`
case 'XXXX':
case 'XX':
// Hours and minutes without `:` delimiter
return formatTimezone(timezoneOffset);
// Hours, minutes and optional seconds with `:` delimiter
// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
// so this token always has the same output as `XXX`
case 'XXXXX':
case 'XXX': // Hours and minutes with `:` delimiter
default:
return formatTimezone(timezoneOffset, ':');
}
},
// Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
x: function x(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
// Hours and optional minutes
case 'x':
return formatTimezoneWithOptionalMinutes(timezoneOffset);
// Hours, minutes and optional seconds without `:` delimiter
// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
// so this token always has the same output as `xx`
case 'xxxx':
case 'xx':
// Hours and minutes without `:` delimiter
return formatTimezone(timezoneOffset);
// Hours, minutes and optional seconds with `:` delimiter
// Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
// so this token always has the same output as `xxx`
case 'xxxxx':
case 'xxx': // Hours and minutes with `:` delimiter
default:
return formatTimezone(timezoneOffset, ':');
}
},
// Timezone (GMT)
O: function O(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
// Short
case 'O':
case 'OO':
case 'OOO':
return 'GMT' + formatTimezoneShort(timezoneOffset, ':');
// Long
case 'OOOO':
default:
return 'GMT' + formatTimezone(timezoneOffset, ':');
}
},
// Timezone (specific non-location)
z: function z(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timezoneOffset = originalDate.getTimezoneOffset();
switch (token) {
// Short
case 'z':
case 'zz':
case 'zzz':
return 'GMT' + formatTimezoneShort(timezoneOffset, ':');
// Long
case 'zzzz':
default:
return 'GMT' + formatTimezone(timezoneOffset, ':');
}
},
// Seconds timestamp
t: function t(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timestamp = Math.floor(originalDate.getTime() / 1000);
return (0, _index6.default)(timestamp, token.length);
},
// Milliseconds timestamp
T: function T(date, token, _localize, options) {
var originalDate = options._originalDate || date;
var timestamp = originalDate.getTime();
return (0, _index6.default)(timestamp, token.length);
}
};
function formatTimezoneShort(offset, dirtyDelimiter) {
var sign = offset > 0 ? '-' : '+';
var absOffset = Math.abs(offset);
var hours = Math.floor(absOffset / 60);
var minutes = absOffset % 60;
if (minutes === 0) {
return sign + String(hours);
}
var delimiter = dirtyDelimiter || '';
return sign + String(hours) + delimiter + (0, _index6.default)(minutes, 2);
}
function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {
if (offset % 60 === 0) {
var sign = offset > 0 ? '-' : '+';
return sign + (0, _index6.default)(Math.abs(offset) / 60, 2);
}
return formatTimezone(offset, dirtyDelimiter);
}
function formatTimezone(offset, dirtyDelimiter) {
var delimiter = dirtyDelimiter || '';
var sign = offset > 0 ? '-' : '+';
var absOffset = Math.abs(offset);
var hours = (0, _index6.default)(Math.floor(absOffset / 60), 2);
var minutes = (0, _index6.default)(absOffset % 60, 2);
return sign + hours + delimiter + minutes;
}
var _default = formatters;
exports.default = _default;
module.exports = exports.default;
+90
View File
@@ -0,0 +1,90 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _index = _interopRequireDefault(require("../../addLeadingZeros/index.js"));
/*
* | | Unit | | Unit |
* |-----|--------------------------------|-----|--------------------------------|
* | a | AM, PM | A* | |
* | d | Day of month | D | |
* | h | Hour [1-12] | H | Hour [0-23] |
* | m | Minute | M | Month |
* | s | Second | S | Fraction of second |
* | y | Year (abs) | Y | |
*
* Letters marked by * are not implemented but reserved by Unicode standard.
*/
var formatters = {
// Year
y: function y(date, token) {
// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens
// | Year | y | yy | yyy | yyyy | yyyyy |
// |----------|-------|----|-------|-------|-------|
// | AD 1 | 1 | 01 | 001 | 0001 | 00001 |
// | AD 12 | 12 | 12 | 012 | 0012 | 00012 |
// | AD 123 | 123 | 23 | 123 | 0123 | 00123 |
// | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |
// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
var signedYear = date.getUTCFullYear();
// Returns 1 for 1 BC (which is year 0 in JavaScript)
var year = signedYear > 0 ? signedYear : 1 - signedYear;
return (0, _index.default)(token === 'yy' ? year % 100 : year, token.length);
},
// Month
M: function M(date, token) {
var month = date.getUTCMonth();
return token === 'M' ? String(month + 1) : (0, _index.default)(month + 1, 2);
},
// Day of the month
d: function d(date, token) {
return (0, _index.default)(date.getUTCDate(), token.length);
},
// AM or PM
a: function a(date, token) {
var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';
switch (token) {
case 'a':
case 'aa':
return dayPeriodEnumValue.toUpperCase();
case 'aaa':
return dayPeriodEnumValue;
case 'aaaaa':
return dayPeriodEnumValue[0];
case 'aaaa':
default:
return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';
}
},
// Hour [1-12]
h: function h(date, token) {
return (0, _index.default)(date.getUTCHours() % 12 || 12, token.length);
},
// Hour [0-23]
H: function H(date, token) {
return (0, _index.default)(date.getUTCHours(), token.length);
},
// Minute
m: function m(date, token) {
return (0, _index.default)(date.getUTCMinutes(), token.length);
},
// Second
s: function s(date, token) {
return (0, _index.default)(date.getUTCSeconds(), token.length);
},
// Fraction of second
S: function S(date, token) {
var numberOfDigits = token.length;
var milliseconds = date.getUTCMilliseconds();
var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));
return (0, _index.default)(fractionalSeconds, token.length);
}
};
var _default = formatters;
exports.default = _default;
module.exports = exports.default;
+88
View File
@@ -0,0 +1,88 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {
switch (pattern) {
case 'P':
return formatLong.date({
width: 'short'
});
case 'PP':
return formatLong.date({
width: 'medium'
});
case 'PPP':
return formatLong.date({
width: 'long'
});
case 'PPPP':
default:
return formatLong.date({
width: 'full'
});
}
};
var timeLongFormatter = function timeLongFormatter(pattern, formatLong) {
switch (pattern) {
case 'p':
return formatLong.time({
width: 'short'
});
case 'pp':
return formatLong.time({
width: 'medium'
});
case 'ppp':
return formatLong.time({
width: 'long'
});
case 'pppp':
default:
return formatLong.time({
width: 'full'
});
}
};
var dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {
var matchResult = pattern.match(/(P+)(p+)?/) || [];
var datePattern = matchResult[1];
var timePattern = matchResult[2];
if (!timePattern) {
return dateLongFormatter(pattern, formatLong);
}
var dateTimeFormat;
switch (datePattern) {
case 'P':
dateTimeFormat = formatLong.dateTime({
width: 'short'
});
break;
case 'PP':
dateTimeFormat = formatLong.dateTime({
width: 'medium'
});
break;
case 'PPP':
dateTimeFormat = formatLong.dateTime({
width: 'long'
});
break;
case 'PPPP':
default:
dateTimeFormat = formatLong.dateTime({
width: 'full'
});
break;
}
return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));
};
var longFormatters = {
p: timeLongFormatter,
P: dateTimeLongFormatter
};
var _default = longFormatters;
exports.default = _default;
module.exports = exports.default;
@@ -0,0 +1,23 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getTimezoneOffsetInMilliseconds;
/**
* Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.
* They usually appear for dates that denote time before the timezones were introduced
* (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891
* and GMT+01:00:00 after that date)
*
* Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,
* which would lead to incorrect calculations.
*
* This function returns the timezone offset in milliseconds that takes seconds in account.
*/
function getTimezoneOffsetInMilliseconds(date) {
var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
utcDate.setUTCFullYear(date.getFullYear());
return date.getTime() - utcDate.getTime();
}
module.exports = exports.default;
+21
View File
@@ -0,0 +1,21 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getUTCDayOfYear;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var MILLISECONDS_IN_DAY = 86400000;
function getUTCDayOfYear(dirtyDate) {
(0, _index2.default)(1, arguments);
var date = (0, _index.default)(dirtyDate);
var timestamp = date.getTime();
date.setUTCMonth(0, 1);
date.setUTCHours(0, 0, 0, 0);
var startOfYearTimestamp = date.getTime();
var difference = timestamp - startOfYearTimestamp;
return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;
}
module.exports = exports.default;
+23
View File
@@ -0,0 +1,23 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getUTCISOWeek;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../startOfUTCISOWeek/index.js"));
var _index3 = _interopRequireDefault(require("../startOfUTCISOWeekYear/index.js"));
var _index4 = _interopRequireDefault(require("../requiredArgs/index.js"));
var MILLISECONDS_IN_WEEK = 604800000;
function getUTCISOWeek(dirtyDate) {
(0, _index4.default)(1, arguments);
var date = (0, _index.default)(dirtyDate);
var diff = (0, _index2.default)(date).getTime() - (0, _index3.default)(date).getTime();
// Round the number of days to the nearest integer
// because the number of milliseconds in a week is not constant
// (e.g. it's different in the week of the daylight saving time clock shift)
return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;
}
module.exports = exports.default;
+31
View File
@@ -0,0 +1,31 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getUTCISOWeekYear;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index3 = _interopRequireDefault(require("../startOfUTCISOWeek/index.js"));
function getUTCISOWeekYear(dirtyDate) {
(0, _index2.default)(1, arguments);
var date = (0, _index.default)(dirtyDate);
var year = date.getUTCFullYear();
var fourthOfJanuaryOfNextYear = new Date(0);
fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);
fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);
var startOfNextYear = (0, _index3.default)(fourthOfJanuaryOfNextYear);
var fourthOfJanuaryOfThisYear = new Date(0);
fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);
fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);
var startOfThisYear = (0, _index3.default)(fourthOfJanuaryOfThisYear);
if (date.getTime() >= startOfNextYear.getTime()) {
return year + 1;
} else if (date.getTime() >= startOfThisYear.getTime()) {
return year;
} else {
return year - 1;
}
}
module.exports = exports.default;
+23
View File
@@ -0,0 +1,23 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getUTCWeek;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../startOfUTCWeek/index.js"));
var _index3 = _interopRequireDefault(require("../startOfUTCWeekYear/index.js"));
var _index4 = _interopRequireDefault(require("../requiredArgs/index.js"));
var MILLISECONDS_IN_WEEK = 604800000;
function getUTCWeek(dirtyDate, options) {
(0, _index4.default)(1, arguments);
var date = (0, _index.default)(dirtyDate);
var diff = (0, _index2.default)(date, options).getTime() - (0, _index3.default)(date, options).getTime();
// Round the number of days to the nearest integer
// because the number of milliseconds in a week is not constant
// (e.g. it's different in the week of the daylight saving time clock shift)
return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;
}
module.exports = exports.default;
+41
View File
@@ -0,0 +1,41 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getUTCWeekYear;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index3 = _interopRequireDefault(require("../startOfUTCWeek/index.js"));
var _index4 = _interopRequireDefault(require("../toInteger/index.js"));
var _index5 = require("../defaultOptions/index.js");
function getUTCWeekYear(dirtyDate, options) {
var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
(0, _index2.default)(1, arguments);
var date = (0, _index.default)(dirtyDate);
var year = date.getUTCFullYear();
var defaultOptions = (0, _index5.getDefaultOptions)();
var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);
// Test if weekStartsOn is between 1 and 7 _and_ is not NaN
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');
}
var firstWeekOfNextYear = new Date(0);
firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);
firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);
var startOfNextYear = (0, _index3.default)(firstWeekOfNextYear, options);
var firstWeekOfThisYear = new Date(0);
firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);
firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);
var startOfThisYear = (0, _index3.default)(firstWeekOfThisYear, options);
if (date.getTime() >= startOfNextYear.getTime()) {
return year + 1;
} else if (date.getTime() >= startOfThisYear.getTime()) {
return year;
} else {
return year - 1;
}
}
module.exports = exports.default;
+16
View File
@@ -0,0 +1,16 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = isSameUTCWeek;
var _index = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index2 = _interopRequireDefault(require("../startOfUTCWeek/index.js"));
function isSameUTCWeek(dirtyDateLeft, dirtyDateRight, options) {
(0, _index.default)(2, arguments);
var dateLeftStartOfWeek = (0, _index2.default)(dirtyDateLeft, options);
var dateRightStartOfWeek = (0, _index2.default)(dirtyDateRight, options);
return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime();
}
module.exports = exports.default;
+27
View File
@@ -0,0 +1,27 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isProtectedDayOfYearToken = isProtectedDayOfYearToken;
exports.isProtectedWeekYearToken = isProtectedWeekYearToken;
exports.throwProtectedError = throwProtectedError;
var protectedDayOfYearTokens = ['D', 'DD'];
var protectedWeekYearTokens = ['YY', 'YYYY'];
function isProtectedDayOfYearToken(token) {
return protectedDayOfYearTokens.indexOf(token) !== -1;
}
function isProtectedWeekYearToken(token) {
return protectedWeekYearTokens.indexOf(token) !== -1;
}
function throwProtectedError(token, format, input) {
if (token === 'YYYY') {
throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
} else if (token === 'YY') {
throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
} else if (token === 'D') {
throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
} else if (token === 'DD') {
throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
}
}
+12
View File
@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = requiredArgs;
function requiredArgs(required, args) {
if (args.length < required) {
throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');
}
}
module.exports = exports.default;
+19
View File
@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getRoundingMethod = getRoundingMethod;
var roundingMap = {
ceil: Math.ceil,
round: Math.round,
floor: Math.floor,
trunc: function trunc(value) {
return value < 0 ? Math.ceil(value) : Math.floor(value);
} // Math.trunc is not supported by IE
};
var defaultRoundingMethod = 'trunc';
function getRoundingMethod(method) {
return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];
}
+31
View File
@@ -0,0 +1,31 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setUTCDay;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index3 = _interopRequireDefault(require("../toInteger/index.js"));
var _index4 = require("../defaultOptions/index.js");
function setUTCDay(dirtyDate, dirtyDay, options) {
var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
(0, _index2.default)(2, arguments);
var defaultOptions = (0, _index4.getDefaultOptions)();
var weekStartsOn = (0, _index3.default)((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);
// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
var date = (0, _index.default)(dirtyDate);
var day = (0, _index3.default)(dirtyDay);
var currentDay = date.getUTCDay();
var remainder = day % 7;
var dayIndex = (remainder + 7) % 7;
var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
date.setUTCDate(date.getUTCDate() + diff);
return date;
}
module.exports = exports.default;
+26
View File
@@ -0,0 +1,26 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setUTCISODay;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index3 = _interopRequireDefault(require("../toInteger/index.js"));
function setUTCISODay(dirtyDate, dirtyDay) {
(0, _index2.default)(2, arguments);
var day = (0, _index3.default)(dirtyDay);
if (day % 7 === 0) {
day = day - 7;
}
var weekStartsOn = 1;
var date = (0, _index.default)(dirtyDate);
var currentDay = date.getUTCDay();
var remainder = day % 7;
var dayIndex = (remainder + 7) % 7;
var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
date.setUTCDate(date.getUTCDate() + diff);
return date;
}
module.exports = exports.default;
+20
View File
@@ -0,0 +1,20 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setUTCISOWeek;
var _index = _interopRequireDefault(require("../toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../getUTCISOWeek/index.js"));
var _index4 = _interopRequireDefault(require("../requiredArgs/index.js"));
function setUTCISOWeek(dirtyDate, dirtyISOWeek) {
(0, _index4.default)(2, arguments);
var date = (0, _index2.default)(dirtyDate);
var isoWeek = (0, _index.default)(dirtyISOWeek);
var diff = (0, _index3.default)(date) - isoWeek;
date.setUTCDate(date.getUTCDate() - diff * 7);
return date;
}
module.exports = exports.default;
+20
View File
@@ -0,0 +1,20 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = setUTCWeek;
var _index = _interopRequireDefault(require("../toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../getUTCWeek/index.js"));
var _index4 = _interopRequireDefault(require("../requiredArgs/index.js"));
function setUTCWeek(dirtyDate, dirtyWeek, options) {
(0, _index4.default)(2, arguments);
var date = (0, _index2.default)(dirtyDate);
var week = (0, _index.default)(dirtyWeek);
var diff = (0, _index3.default)(date, options) - week;
date.setUTCDate(date.getUTCDate() - diff * 7);
return date;
}
module.exports = exports.default;
+20
View File
@@ -0,0 +1,20 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = startOfUTCISOWeek;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
function startOfUTCISOWeek(dirtyDate) {
(0, _index2.default)(1, arguments);
var weekStartsOn = 1;
var date = (0, _index.default)(dirtyDate);
var day = date.getUTCDay();
var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
date.setUTCDate(date.getUTCDate() - diff);
date.setUTCHours(0, 0, 0, 0);
return date;
}
module.exports = exports.default;
+20
View File
@@ -0,0 +1,20 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = startOfUTCISOWeekYear;
var _index = _interopRequireDefault(require("../getUTCISOWeekYear/index.js"));
var _index2 = _interopRequireDefault(require("../startOfUTCISOWeek/index.js"));
var _index3 = _interopRequireDefault(require("../requiredArgs/index.js"));
function startOfUTCISOWeekYear(dirtyDate) {
(0, _index3.default)(1, arguments);
var year = (0, _index.default)(dirtyDate);
var fourthOfJanuary = new Date(0);
fourthOfJanuary.setUTCFullYear(year, 0, 4);
fourthOfJanuary.setUTCHours(0, 0, 0, 0);
var date = (0, _index2.default)(fourthOfJanuary);
return date;
}
module.exports = exports.default;
+29
View File
@@ -0,0 +1,29 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = startOfUTCWeek;
var _index = _interopRequireDefault(require("../../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index3 = _interopRequireDefault(require("../toInteger/index.js"));
var _index4 = require("../defaultOptions/index.js");
function startOfUTCWeek(dirtyDate, options) {
var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
(0, _index2.default)(1, arguments);
var defaultOptions = (0, _index4.getDefaultOptions)();
var weekStartsOn = (0, _index3.default)((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);
// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
}
var date = (0, _index.default)(dirtyDate);
var day = date.getUTCDay();
var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
date.setUTCDate(date.getUTCDate() - diff);
date.setUTCHours(0, 0, 0, 0);
return date;
}
module.exports = exports.default;
+25
View File
@@ -0,0 +1,25 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = startOfUTCWeekYear;
var _index = _interopRequireDefault(require("../getUTCWeekYear/index.js"));
var _index2 = _interopRequireDefault(require("../requiredArgs/index.js"));
var _index3 = _interopRequireDefault(require("../startOfUTCWeek/index.js"));
var _index4 = _interopRequireDefault(require("../toInteger/index.js"));
var _index5 = require("../defaultOptions/index.js");
function startOfUTCWeekYear(dirtyDate, options) {
var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
(0, _index2.default)(1, arguments);
var defaultOptions = (0, _index5.getDefaultOptions)();
var firstWeekContainsDate = (0, _index4.default)((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);
var year = (0, _index.default)(dirtyDate, options);
var firstWeek = new Date(0);
firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);
firstWeek.setUTCHours(0, 0, 0, 0);
var date = (0, _index3.default)(firstWeek, options);
return date;
}
module.exports = exports.default;
+33
View File
@@ -0,0 +1,33 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.assertType = assertType;
exports.generateOffset = generateOffset;
exports.resetDefaultOptions = resetDefaultOptions;
var _index = _interopRequireDefault(require("../addLeadingZeros/index.js"));
var _index2 = require("../defaultOptions/index.js");
function assertType(_) {}
function resetDefaultOptions() {
(0, _index2.setDefaultOptions)({});
}
// This makes sure we create the consistent offsets across timezones, no matter where these tests are ran.
function generateOffset(originalDate) {
// Add the timezone.
var offset = '';
var tzOffset = originalDate.getTimezoneOffset();
if (tzOffset !== 0) {
var absoluteOffset = Math.abs(tzOffset);
var hourOffset = (0, _index.default)(Math.floor(absoluteOffset / 60), 2);
var minuteOffset = (0, _index.default)(absoluteOffset % 60, 2);
// If less than 0, the sign is +, because it is ahead of time.
var sign = tzOffset < 0 ? '+' : '-';
offset = "".concat(sign).concat(hourOffset, ":").concat(minuteOffset);
} else {
offset = 'Z';
}
return offset;
}
+17
View File
@@ -0,0 +1,17 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = toInteger;
function toInteger(dirtyNumber) {
if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {
return NaN;
}
var number = Number(dirtyNumber);
if (isNaN(number)) {
return number;
}
return number < 0 ? Math.ceil(number) : Math.floor(number);
}
module.exports = exports.default;
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { add } from 'date-fns'
export default add
+78
View File
@@ -0,0 +1,78 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = add;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _index = _interopRequireDefault(require("../addDays/index.js"));
var _index2 = _interopRequireDefault(require("../addMonths/index.js"));
var _index3 = _interopRequireDefault(require("../toDate/index.js"));
var _index4 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index5 = _interopRequireDefault(require("../_lib/toInteger/index.js"));
/**
* @name add
* @category Common Helpers
* @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.
*
* @description
* Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
*
* | Key | Description |
* |----------------|------------------------------------|
* | years | Amount of years to be added |
* | months | Amount of months to be added |
* | weeks | Amount of weeks to be added |
* | days | Amount of days to be added |
* | hours | Amount of hours to be added |
* | minutes | Amount of minutes to be added |
* | seconds | Amount of seconds to be added |
*
* All values default to 0
*
* @returns {Date} the new date with the seconds added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add the following duration to 1 September 2014, 10:19:50
* const result = add(new Date(2014, 8, 1, 10, 19, 50), {
* years: 2,
* months: 9,
* weeks: 1,
* days: 7,
* hours: 5,
* minutes: 9,
* seconds: 30,
* })
* //=> Thu Jun 15 2017 15:29:20
*/
function add(dirtyDate, duration) {
(0, _index4.default)(2, arguments);
if (!duration || (0, _typeof2.default)(duration) !== 'object') return new Date(NaN);
var years = duration.years ? (0, _index5.default)(duration.years) : 0;
var months = duration.months ? (0, _index5.default)(duration.months) : 0;
var weeks = duration.weeks ? (0, _index5.default)(duration.weeks) : 0;
var days = duration.days ? (0, _index5.default)(duration.days) : 0;
var hours = duration.hours ? (0, _index5.default)(duration.hours) : 0;
var minutes = duration.minutes ? (0, _index5.default)(duration.minutes) : 0;
var seconds = duration.seconds ? (0, _index5.default)(duration.seconds) : 0;
// Add years and months
var date = (0, _index3.default)(dirtyDate);
var dateWithMonths = months || years ? (0, _index2.default)(date, months + years * 12) : date;
// Add weeks and days
var dateWithDays = days || weeks ? (0, _index.default)(dateWithMonths, days + weeks * 7) : dateWithMonths;
// Add days, hours, minutes and seconds
var minutesToAdd = minutes + hours * 60;
var secondsToAdd = seconds + minutesToAdd * 60;
var msToAdd = secondsToAdd * 1000;
var finalDate = new Date(dateWithDays.getTime() + msToAdd);
return finalDate;
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, duration: Duration) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/add/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addBusinessDays } from 'date-fns'
export default addBusinessDays
+66
View File
@@ -0,0 +1,66 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addBusinessDays;
var _index = _interopRequireDefault(require("../isWeekend/index.js"));
var _index2 = _interopRequireDefault(require("../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index4 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index5 = _interopRequireDefault(require("../isSunday/index.js"));
var _index6 = _interopRequireDefault(require("../isSaturday/index.js"));
/**
* @name addBusinessDays
* @category Day Helpers
* @summary Add the specified number of business days (mon - fri) to the given date.
*
* @description
* Add the specified number of business days (mon - fri) to the given date, ignoring weekends.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of business days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the business days added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 10 business days to 1 September 2014:
* const result = addBusinessDays(new Date(2014, 8, 1), 10)
* //=> Mon Sep 15 2014 00:00:00 (skipped weekend days)
*/
function addBusinessDays(dirtyDate, dirtyAmount) {
(0, _index4.default)(2, arguments);
var date = (0, _index2.default)(dirtyDate);
var startedOnWeekend = (0, _index.default)(date);
var amount = (0, _index3.default)(dirtyAmount);
if (isNaN(amount)) return new Date(NaN);
var hours = date.getHours();
var sign = amount < 0 ? -1 : 1;
var fullWeeks = (0, _index3.default)(amount / 5);
date.setDate(date.getDate() + fullWeeks * 7);
// Get remaining days not part of a full week
var restDays = Math.abs(amount % 5);
// Loops over remaining days
while (restDays > 0) {
date.setDate(date.getDate() + sign);
if (!(0, _index.default)(date)) restDays -= 1;
}
// If the date is a weekend day and we reduce a dividable of
// 5 from it, we land on a weekend date.
// To counter this, we add days accordingly to land on the next business day
if (startedOnWeekend && (0, _index.default)(date) && amount !== 0) {
// If we're reducing days, we want to add days until we land on a weekday
// If we're adding days we want to reduce days until we land on a weekday
if ((0, _index6.default)(date)) date.setDate(date.getDate() + (sign < 0 ? 2 : -1));
if ((0, _index5.default)(date)) date.setDate(date.getDate() + (sign < 0 ? 1 : -2));
}
// Restore hours to avoid DST lag
date.setHours(hours);
return date;
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addBusinessDays/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addDays } from 'date-fns'
export default addDays
+43
View File
@@ -0,0 +1,43 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addDays;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addDays
* @category Day Helpers
* @summary Add the specified number of days to the given date.
*
* @description
* Add the specified number of days to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} - the new date with the days added
* @throws {TypeError} - 2 arguments required
*
* @example
* // Add 10 days to 1 September 2014:
* const result = addDays(new Date(2014, 8, 1), 10)
* //=> Thu Sep 11 2014 00:00:00
*/
function addDays(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var date = (0, _index2.default)(dirtyDate);
var amount = (0, _index.default)(dirtyAmount);
if (isNaN(amount)) {
return new Date(NaN);
}
if (!amount) {
// If 0 days, no-op to avoid changing times in the hour before end of DST
return date;
}
date.setDate(date.getDate() + amount);
return date;
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addDays/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addHours } from 'date-fns'
export default addHours
+36
View File
@@ -0,0 +1,36 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addHours;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../addMilliseconds/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var MILLISECONDS_IN_HOUR = 3600000;
/**
* @name addHours
* @category Hour Helpers
* @summary Add the specified number of hours to the given date.
*
* @description
* Add the specified number of hours to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the hours added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 2 hours to 10 July 2014 23:00:00:
* const result = addHours(new Date(2014, 6, 10, 23, 0), 2)
* //=> Fri Jul 11 2014 01:00:00
*/
function addHours(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
return (0, _index2.default)(dirtyDate, amount * MILLISECONDS_IN_HOUR);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addHours/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addISOWeekYears } from 'date-fns'
export default addISOWeekYears
+37
View File
@@ -0,0 +1,37 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addISOWeekYears;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../getISOWeekYear/index.js"));
var _index3 = _interopRequireDefault(require("../setISOWeekYear/index.js"));
var _index4 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addISOWeekYears
* @category ISO Week-Numbering Year Helpers
* @summary Add the specified number of ISO week-numbering years to the given date.
*
* @description
* Add the specified number of ISO week-numbering years to the given date.
*
* ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of ISO week-numbering years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the ISO week-numbering years added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 5 ISO week-numbering years to 2 July 2010:
* const result = addISOWeekYears(new Date(2010, 6, 2), 5)
* //=> Fri Jun 26 2015 00:00:00
*/
function addISOWeekYears(dirtyDate, dirtyAmount) {
(0, _index4.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
return (0, _index3.default)(dirtyDate, (0, _index2.default)(dirtyDate) + amount);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addISOWeekYears/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addMilliseconds } from 'date-fns'
export default addMilliseconds
+35
View File
@@ -0,0 +1,35 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addMilliseconds;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addMilliseconds
* @category Millisecond Helpers
* @summary Add the specified number of milliseconds to the given date.
*
* @description
* Add the specified number of milliseconds to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the milliseconds added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 750 milliseconds to 10 July 2014 12:45:30.000:
* const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)
* //=> Thu Jul 10 2014 12:45:30.750
*/
function addMilliseconds(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var timestamp = (0, _index2.default)(dirtyDate).getTime();
var amount = (0, _index.default)(dirtyAmount);
return new Date(timestamp + amount);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addMilliseconds/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addMinutes } from 'date-fns'
export default addMinutes
+36
View File
@@ -0,0 +1,36 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addMinutes;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../addMilliseconds/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var MILLISECONDS_IN_MINUTE = 60000;
/**
* @name addMinutes
* @category Minute Helpers
* @summary Add the specified number of minutes to the given date.
*
* @description
* Add the specified number of minutes to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the minutes added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 30 minutes to 10 July 2014 12:00:00:
* const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)
* //=> Thu Jul 10 2014 12:30:00
*/
function addMinutes(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
return (0, _index2.default)(dirtyDate, amount * MILLISECONDS_IN_MINUTE);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addMinutes/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addMonths } from 'date-fns'
export default addMonths
+69
View File
@@ -0,0 +1,69 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addMonths;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addMonths
* @category Month Helpers
* @summary Add the specified number of months to the given date.
*
* @description
* Add the specified number of months to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the months added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 5 months to 1 September 2014:
* const result = addMonths(new Date(2014, 8, 1), 5)
* //=> Sun Feb 01 2015 00:00:00
*/
function addMonths(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var date = (0, _index2.default)(dirtyDate);
var amount = (0, _index.default)(dirtyAmount);
if (isNaN(amount)) {
return new Date(NaN);
}
if (!amount) {
// If 0 months, no-op to avoid changing times in the hour before end of DST
return date;
}
var dayOfMonth = date.getDate();
// The JS Date object supports date math by accepting out-of-bounds values for
// month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and
// new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we
// want except that dates will wrap around the end of a month, meaning that
// new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So
// we'll default to the end of the desired month by adding 1 to the desired
// month and using a date of 0 to back up one day to the end of the desired
// month.
var endOfDesiredMonth = new Date(date.getTime());
endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);
var daysInMonth = endOfDesiredMonth.getDate();
if (dayOfMonth >= daysInMonth) {
// If we're already at the end of the month, then this is the correct date
// and we're done.
return endOfDesiredMonth;
} else {
// Otherwise, we now know that setting the original day-of-month value won't
// cause an overflow, so set the desired day-of-month. Note that we can't
// just set the date of `endOfDesiredMonth` because that object may have had
// its time changed in the unusual case where where a DST transition was on
// the last day of the month and its local time was in the hour skipped or
// repeated next to a DST transition. So we use `date` instead which is
// guaranteed to still have the original time.
date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);
return date;
}
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addMonths/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addQuarters } from 'date-fns'
export default addQuarters
+35
View File
@@ -0,0 +1,35 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addQuarters;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../addMonths/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addQuarters
* @category Quarter Helpers
* @summary Add the specified number of year quarters to the given date.
*
* @description
* Add the specified number of year quarters to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the quarters added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 1 quarter to 1 September 2014:
* const result = addQuarters(new Date(2014, 8, 1), 1)
* //=> Mon Dec 01 2014 00:00:00
*/
function addQuarters(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
var months = amount * 3;
return (0, _index2.default)(dirtyDate, months);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addQuarters/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addSeconds } from 'date-fns'
export default addSeconds
+34
View File
@@ -0,0 +1,34 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addSeconds;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../addMilliseconds/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addSeconds
* @category Second Helpers
* @summary Add the specified number of seconds to the given date.
*
* @description
* Add the specified number of seconds to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the seconds added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 30 seconds to 10 July 2014 12:45:00:
* const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)
* //=> Thu Jul 10 2014 12:45:30
*/
function addSeconds(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
return (0, _index2.default)(dirtyDate, amount * 1000);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addSeconds/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addWeeks } from 'date-fns'
export default addWeeks
+35
View File
@@ -0,0 +1,35 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addWeeks;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../addDays/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addWeeks
* @category Week Helpers
* @summary Add the specified number of weeks to the given date.
*
* @description
* Add the specified number of week to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the weeks added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 4 weeks to 1 September 2014:
* const result = addWeeks(new Date(2014, 8, 1), 4)
* //=> Mon Sep 29 2014 00:00:00
*/
function addWeeks(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
var days = amount * 7;
return (0, _index2.default)(dirtyDate, days);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addWeeks/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { addYears } from 'date-fns'
export default addYears
+34
View File
@@ -0,0 +1,34 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addYears;
var _index = _interopRequireDefault(require("../_lib/toInteger/index.js"));
var _index2 = _interopRequireDefault(require("../addMonths/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name addYears
* @category Year Helpers
* @summary Add the specified number of years to the given date.
*
* @description
* Add the specified number of years to the given date.
*
* @param {Date|Number} date - the date to be changed
* @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
* @returns {Date} the new date with the years added
* @throws {TypeError} 2 arguments required
*
* @example
* // Add 5 years to 1 September 2014:
* const result = addYears(new Date(2014, 8, 1), 5)
* //=> Sun Sep 01 2019 00:00:00
*/
function addYears(dirtyDate, dirtyAmount) {
(0, _index3.default)(2, arguments);
var amount = (0, _index.default)(dirtyAmount);
return (0, _index2.default)(dirtyDate, amount * 12);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, amount: number) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/addYears/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { areIntervalsOverlapping } from 'date-fns'
export default areIntervalsOverlapping
+81
View File
@@ -0,0 +1,81 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = areIntervalsOverlapping;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name areIntervalsOverlapping
* @category Interval Helpers
* @summary Is the given time interval overlapping with another time interval?
*
* @description
* Is the given time interval overlapping with another time interval? Adjacent intervals do not count as overlapping.
*
* @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}
* @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link https://date-fns.org/docs/Interval}
* @param {Object} [options] - the object with options
* @param {Boolean} [options.inclusive=false] - whether the comparison is inclusive or not
* @returns {Boolean} whether the time intervals are overlapping
* @throws {TypeError} 2 arguments required
* @throws {RangeError} The start of an interval cannot be after its end
* @throws {RangeError} Date in interval cannot be `Invalid Date`
*
* @example
* // For overlapping time intervals:
* 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) }
* )
* //=> true
*
* @example
* // For non-overlapping time intervals:
* areIntervalsOverlapping(
* { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
* { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }
* )
* //=> false
*
* @example
* // For adjacent time intervals:
* areIntervalsOverlapping(
* { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
* { start: new Date(2014, 0, 20), end: new Date(2014, 0, 30) }
* )
* //=> false
*
* @example
* // Using the inclusive option:
* areIntervalsOverlapping(
* { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
* { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) }
* )
* //=> false
* areIntervalsOverlapping(
* { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
* { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) },
* { inclusive: true }
* )
* //=> true
*/
function areIntervalsOverlapping(intervalLeft, intervalRight, options) {
(0, _index2.default)(2, arguments);
var leftStartTime = (0, _index.default)(intervalLeft === null || intervalLeft === void 0 ? void 0 : intervalLeft.start).getTime();
var leftEndTime = (0, _index.default)(intervalLeft === null || intervalLeft === void 0 ? void 0 : intervalLeft.end).getTime();
var rightStartTime = (0, _index.default)(intervalRight === null || intervalRight === void 0 ? void 0 : intervalRight.start).getTime();
var rightEndTime = (0, _index.default)(intervalRight === null || intervalRight === void 0 ? void 0 : intervalRight.end).getTime();
// Throw an exception if start date is after end date or if any date is `Invalid Date`
if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {
throw new RangeError('Invalid interval');
}
if (options !== null && options !== void 0 && options.inclusive) {
return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime;
}
return leftStartTime < rightEndTime && rightStartTime < leftEndTime;
}
module.exports = exports.default;
@@ -0,0 +1,58 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
intervalLeft: Interval,
intervalRight: Interval,
options?: {
inclusive?: boolean,
}
) => boolean
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/areIntervalsOverlapping/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { clamp } from 'date-fns'
export default clamp
+43
View File
@@ -0,0 +1,43 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = clamp;
var _index = _interopRequireDefault(require("../max/index.js"));
var _index2 = _interopRequireDefault(require("../min/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name clamp
* @category Interval Helpers
* @summary Return a date bounded by the start and the end of the given interval
*
* @description
* Clamps a date to the lower bound with the start of the interval and the upper
* bound with the end of the interval.
*
* - When the date is less than the start of the interval, the start is returned.
* - When the date is greater than the end of the interval, the end is returned.
* - Otherwise the date is returned.
*
* @example
* // What is Mar, 21, 2021 bounded to an interval starting at Mar, 22, 2021 and ending at Apr, 01, 2021
* const result = clamp(new Date(2021, 2, 21), {
* start: new Date(2021, 2, 22),
* end: new Date(2021, 3, 1),
* })
* //=> Mon Mar 22 2021 00:00:00
*
* @param {Date | Number} date - the date to be bounded
* @param {Interval} interval - the interval to bound to
* @returns {Date} the date bounded by the start and the end of the interval
* @throws {TypeError} 2 arguments required
*/
function clamp(date, _ref) {
var start = _ref.start,
end = _ref.end;
(0, _index3.default)(2, arguments);
return (0, _index2.default)([(0, _index.default)([date, start]), end]);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (date: Date | number, interval: Interval) => Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/clamp/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { closestIndexTo } from 'date-fns'
export default closestIndexTo
+69
View File
@@ -0,0 +1,69 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = closestIndexTo;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name closestIndexTo
* @category Common Helpers
* @summary Return an index of the closest date from the array comparing to the given date.
*
* @description
* Return an index of the closest date from the array comparing to the given date.
*
* @param {Date | Number} dateToCompare - the date to compare with
* @param {Array<Date> | Array<number>} datesArray - the array to search
* @returns {Number | undefined} an index of the date closest to the given date or undefined if no valid value is given
* @throws {TypeError} 2 arguments required
*
* @example
* // Which date is closer to 6 September 2015?
* const dateToCompare = new Date(2015, 8, 6)
* const datesArray = [
* new Date(2015, 0, 1),
* new Date(2016, 0, 1),
* new Date(2017, 0, 1)
* ]
* const result = closestIndexTo(dateToCompare, datesArray)
* //=> 1
*/
function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {
(0, _index2.default)(2, arguments);
var dateToCompare = (0, _index.default)(dirtyDateToCompare);
if (isNaN(Number(dateToCompare))) return NaN;
var timeToCompare = dateToCompare.getTime();
var datesArray;
// `dirtyDatesArray` is undefined or null
if (dirtyDatesArray == null) {
datesArray = [];
// `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method
} else if (typeof dirtyDatesArray.forEach === 'function') {
datesArray = dirtyDatesArray;
// If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array
} else {
datesArray = Array.prototype.slice.call(dirtyDatesArray);
}
var result;
var minDistance;
datesArray.forEach(function (dirtyDate, index) {
var currentDate = (0, _index.default)(dirtyDate);
if (isNaN(Number(currentDate))) {
result = NaN;
minDistance = NaN;
return;
}
var distance = Math.abs(timeToCompare - currentDate.getTime());
if (result == null || distance < Number(minDistance)) {
result = index;
minDistance = distance;
}
});
return result;
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateToCompare: Date | number,
datesArray: (Date | number)[]
) => ?number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/closestIndexTo/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { closestTo } from 'date-fns'
export default closestTo
+67
View File
@@ -0,0 +1,67 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = closestTo;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name closestTo
* @category Common Helpers
* @summary Return a date from the array closest to the given date.
*
* @description
* Return a date from the array closest to the given date.
*
* @param {Date | Number} dateToCompare - the date to compare with
* @param {Array<Date> | Array<number>} datesArray - the array to search
* @returns {Date | undefined} the date from the array closest to the given date or undefined if no valid value is given
* @throws {TypeError} 2 arguments required
*
* @example
* // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?
* const dateToCompare = new Date(2015, 8, 6)
* const result = closestTo(dateToCompare, [
* new Date(2000, 0, 1),
* new Date(2030, 0, 1)
* ])
* //=> Tue Jan 01 2030 00:00:00
*/
function closestTo(dirtyDateToCompare, dirtyDatesArray) {
(0, _index2.default)(2, arguments);
var dateToCompare = (0, _index.default)(dirtyDateToCompare);
if (isNaN(Number(dateToCompare))) return new Date(NaN);
var timeToCompare = dateToCompare.getTime();
var datesArray;
// `dirtyDatesArray` is undefined or null
if (dirtyDatesArray == null) {
datesArray = [];
// `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method
} else if (typeof dirtyDatesArray.forEach === 'function') {
datesArray = dirtyDatesArray;
// If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array
} else {
datesArray = Array.prototype.slice.call(dirtyDatesArray);
}
var result;
var minDistance;
datesArray.forEach(function (dirtyDate) {
var currentDate = (0, _index.default)(dirtyDate);
if (isNaN(Number(currentDate))) {
result = new Date(NaN);
minDistance = NaN;
return;
}
var distance = Math.abs(timeToCompare - currentDate.getTime());
if (result == null || distance < Number(minDistance)) {
result = currentDate;
minDistance = distance;
}
});
return result;
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateToCompare: Date | number,
datesArray: (Date | number)[]
) => ?Date
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/closestTo/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { compareAsc } from 'date-fns'
export default compareAsc
+56
View File
@@ -0,0 +1,56 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = compareAsc;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name compareAsc
* @category Common Helpers
* @summary Compare the two dates and return -1, 0 or 1.
*
* @description
* Compare the two dates and return 1 if the first date is after the second,
* -1 if the first date is before the second or 0 if dates are equal.
*
* @param {Date|Number} dateLeft - the first date to compare
* @param {Date|Number} dateRight - the second date to compare
* @returns {Number} the result of the comparison
* @throws {TypeError} 2 arguments required
*
* @example
* // Compare 11 February 1987 and 10 July 1989:
* const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))
* //=> -1
*
* @example
* // Sort the array of dates:
* const result = [
* new Date(1995, 6, 2),
* new Date(1987, 1, 11),
* new Date(1989, 6, 10)
* ].sort(compareAsc)
* //=> [
* // Wed Feb 11 1987 00:00:00,
* // Mon Jul 10 1989 00:00:00,
* // Sun Jul 02 1995 00:00:00
* // ]
*/
function compareAsc(dirtyDateLeft, dirtyDateRight) {
(0, _index2.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var diff = dateLeft.getTime() - dateRight.getTime();
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1;
// Return 0 if diff is 0; return NaN if diff is NaN
} else {
return diff;
}
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/compareAsc/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { compareDesc } from 'date-fns'
export default compareDesc
+56
View File
@@ -0,0 +1,56 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = compareDesc;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name compareDesc
* @category Common Helpers
* @summary Compare the two dates reverse chronologically and return -1, 0 or 1.
*
* @description
* Compare the two dates and return -1 if the first date is after the second,
* 1 if the first date is before the second or 0 if dates are equal.
*
* @param {Date|Number} dateLeft - the first date to compare
* @param {Date|Number} dateRight - the second date to compare
* @returns {Number} the result of the comparison
* @throws {TypeError} 2 arguments required
*
* @example
* // Compare 11 February 1987 and 10 July 1989 reverse chronologically:
* const result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))
* //=> 1
*
* @example
* // Sort the array of dates in reverse chronological order:
* const result = [
* new Date(1995, 6, 2),
* new Date(1987, 1, 11),
* new Date(1989, 6, 10)
* ].sort(compareDesc)
* //=> [
* // Sun Jul 02 1995 00:00:00,
* // Mon Jul 10 1989 00:00:00,
* // Wed Feb 11 1987 00:00:00
* // ]
*/
function compareDesc(dirtyDateLeft, dirtyDateRight) {
(0, _index2.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var diff = dateLeft.getTime() - dateRight.getTime();
if (diff > 0) {
return -1;
} else if (diff < 0) {
return 1;
// Return 0 if diff is 0; return NaN if diff is NaN
} else {
return diff;
}
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/compareDesc/index.js",
"typings": "../typings.d.ts"
}
+20
View File
@@ -0,0 +1,20 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export const daysInWeek: number
export const daysInYear: number
export const maxTime: number
export const millisecondsInMinute: number
export const millisecondsInHour: number
export const millisecondsInSecond: number
export const minTime: number
export const minutesInHour: number
export const monthsInQuarter: number
export const monthsInYear: number
export const quartersInYear: number
export const secondsInHour: number
export const secondsInMinute: number
export const secondsInDay: number
export const secondsInWeek: number
export const secondsInYear: number
export const secondsInMonth: number
export const secondsInQuarter: number
+207
View File
@@ -0,0 +1,207 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.secondsInYear = exports.secondsInWeek = exports.secondsInQuarter = exports.secondsInMonth = exports.secondsInMinute = exports.secondsInHour = exports.secondsInDay = exports.quartersInYear = exports.monthsInYear = exports.monthsInQuarter = exports.minutesInHour = exports.minTime = exports.millisecondsInSecond = exports.millisecondsInMinute = exports.millisecondsInHour = exports.maxTime = exports.daysInYear = exports.daysInWeek = void 0;
/**
* Days in 1 week.
*
* @name daysInWeek
* @constant
* @type {number}
* @default
*/
var daysInWeek = 7;
/**
* Days in 1 year
* One years equals 365.2425 days according to the formula:
*
* > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.
* > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days
*
* @name daysInYear
* @constant
* @type {number}
* @default
*/
exports.daysInWeek = daysInWeek;
var daysInYear = 365.2425;
/**
* Maximum allowed time.
*
* @name maxTime
* @constant
* @type {number}
* @default
*/
exports.daysInYear = daysInYear;
var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;
/**
* Milliseconds in 1 minute
*
* @name millisecondsInMinute
* @constant
* @type {number}
* @default
*/
exports.maxTime = maxTime;
var millisecondsInMinute = 60000;
/**
* Milliseconds in 1 hour
*
* @name millisecondsInHour
* @constant
* @type {number}
* @default
*/
exports.millisecondsInMinute = millisecondsInMinute;
var millisecondsInHour = 3600000;
/**
* Milliseconds in 1 second
*
* @name millisecondsInSecond
* @constant
* @type {number}
* @default
*/
exports.millisecondsInHour = millisecondsInHour;
var millisecondsInSecond = 1000;
/**
* Minimum allowed time.
*
* @name minTime
* @constant
* @type {number}
* @default
*/
exports.millisecondsInSecond = millisecondsInSecond;
var minTime = -maxTime;
/**
* Minutes in 1 hour
*
* @name minutesInHour
* @constant
* @type {number}
* @default
*/
exports.minTime = minTime;
var minutesInHour = 60;
/**
* Months in 1 quarter
*
* @name monthsInQuarter
* @constant
* @type {number}
* @default
*/
exports.minutesInHour = minutesInHour;
var monthsInQuarter = 3;
/**
* Months in 1 year
*
* @name monthsInYear
* @constant
* @type {number}
* @default
*/
exports.monthsInQuarter = monthsInQuarter;
var monthsInYear = 12;
/**
* Quarters in 1 year
*
* @name quartersInYear
* @constant
* @type {number}
* @default
*/
exports.monthsInYear = monthsInYear;
var quartersInYear = 4;
/**
* Seconds in 1 hour
*
* @name secondsInHour
* @constant
* @type {number}
* @default
*/
exports.quartersInYear = quartersInYear;
var secondsInHour = 3600;
/**
* Seconds in 1 minute
*
* @name secondsInMinute
* @constant
* @type {number}
* @default
*/
exports.secondsInHour = secondsInHour;
var secondsInMinute = 60;
/**
* Seconds in 1 day
*
* @name secondsInDay
* @constant
* @type {number}
* @default
*/
exports.secondsInMinute = secondsInMinute;
var secondsInDay = secondsInHour * 24;
/**
* Seconds in 1 week
*
* @name secondsInWeek
* @constant
* @type {number}
* @default
*/
exports.secondsInDay = secondsInDay;
var secondsInWeek = secondsInDay * 7;
/**
* Seconds in 1 year
*
* @name secondsInYear
* @constant
* @type {number}
* @default
*/
exports.secondsInWeek = secondsInWeek;
var secondsInYear = secondsInDay * daysInYear;
/**
* Seconds in 1 month
*
* @name secondsInMonth
* @constant
* @type {number}
* @default
*/
exports.secondsInYear = secondsInYear;
var secondsInMonth = secondsInYear / 12;
/**
* Seconds in 1 quarter
*
* @name secondsInQuarter
* @constant
* @type {number}
* @default
*/
exports.secondsInMonth = secondsInMonth;
var secondsInQuarter = secondsInMonth * 3;
exports.secondsInQuarter = secondsInQuarter;
+14
View File
@@ -0,0 +1,14 @@
// @flow
declare export var daysInWeek: number
declare export var maxTime: number
declare export var millisecondsInMinute: number
declare export var millisecondsInHour: number
declare export var millisecondsInSecond: number
declare export var minTime: number
declare export var minutesInHour: number
declare export var monthsInQuarter: number
declare export var monthsInYear: number
declare export var quartersInYear: number
declare export var secondsInHour: number
declare export var secondsInMinute: number
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { daysToWeeks } from 'date-fns'
export default daysToWeeks
+38
View File
@@ -0,0 +1,38 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = daysToWeeks;
var _index = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index2 = require("../constants/index.js");
/**
* @name daysToWeeks
* @category Conversion Helpers
* @summary Convert days to weeks.
*
* @description
* Convert a number of days to a full number of weeks.
*
* @param {number} days - number of days to be converted
*
* @returns {number} the number of days converted in weeks
* @throws {TypeError} 1 argument required
*
* @example
* // Convert 14 days to weeks:
* const result = daysToWeeks(14)
* //=> 2
*
* @example
* // It uses floor rounding:
* const result = daysToWeeks(13)
* //=> 1
*/
function daysToWeeks(days) {
(0, _index.default)(1, arguments);
var weeks = days / _index2.daysInWeek;
return Math.floor(weeks);
}
module.exports = exports.default;
+52
View File
@@ -0,0 +1,52 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (days: number) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/daysToWeeks/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInBusinessDays } from 'date-fns'
export default differenceInBusinessDays
+84
View File
@@ -0,0 +1,84 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInBusinessDays;
var _index = _interopRequireDefault(require("../addDays/index.js"));
var _index2 = _interopRequireDefault(require("../differenceInCalendarDays/index.js"));
var _index3 = _interopRequireDefault(require("../isSameDay/index.js"));
var _index4 = _interopRequireDefault(require("../isValid/index.js"));
var _index5 = _interopRequireDefault(require("../isWeekend/index.js"));
var _index6 = _interopRequireDefault(require("../toDate/index.js"));
var _index7 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index8 = _interopRequireDefault(require("../_lib/toInteger/index.js"));
/**
* @name differenceInBusinessDays
* @category Day Helpers
* @summary Get the number of business days between the given dates.
*
* @description
* Get the number of business day periods between the given dates.
* Business days being days that arent in the weekend.
* Like `differenceInCalendarDays`, the function removes the times from
* the dates before calculating the difference.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of business days
* @throws {TypeError} 2 arguments required
*
* @example
* // How many business days are between
* // 10 January 2014 and 20 July 2014?
* const result = differenceInBusinessDays(
* new Date(2014, 6, 20),
* new Date(2014, 0, 10)
* )
* //=> 136
*
* // How many business days are between
* // 30 November 2021 and 1 November 2021?
* const result = differenceInBusinessDays(
* new Date(2021, 10, 30),
* new Date(2021, 10, 1)
* )
* //=> 21
*
* // How many business days are between
* // 1 November 2021 and 1 December 2021?
* const result = differenceInBusinessDays(
* new Date(2021, 10, 1),
* new Date(2021, 11, 1)
* )
* //=> -22
*
* // How many business days are between
* // 1 November 2021 and 1 November 2021 ?
* const result = differenceInBusinessDays(
* new Date(2021, 10, 1),
* new Date(2021, 10, 1)
* )
* //=> 0
*/
function differenceInBusinessDays(dirtyDateLeft, dirtyDateRight) {
(0, _index7.default)(2, arguments);
var dateLeft = (0, _index6.default)(dirtyDateLeft);
var dateRight = (0, _index6.default)(dirtyDateRight);
if (!(0, _index4.default)(dateLeft) || !(0, _index4.default)(dateRight)) return NaN;
var calendarDifference = (0, _index2.default)(dateLeft, dateRight);
var sign = calendarDifference < 0 ? -1 : 1;
var weeks = (0, _index8.default)(calendarDifference / 7);
var result = weeks * 5;
dateRight = (0, _index.default)(dateRight, weeks * 7);
// the loop below will run at most 6 times to account for the remaining days that don't makeup a full week
while (!(0, _index3.default)(dateLeft, dateRight)) {
// sign is used to account for both negative and positive differences
result += (0, _index5.default)(dateRight) ? 0 : sign;
dateRight = (0, _index.default)(dateRight, sign);
}
return result === 0 ? 0 : result;
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInBusinessDays/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarDays } from 'date-fns'
export default differenceInCalendarDays
+55
View File
@@ -0,0 +1,55 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarDays;
var _index = _interopRequireDefault(require("../_lib/getTimezoneOffsetInMilliseconds/index.js"));
var _index2 = _interopRequireDefault(require("../startOfDay/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var MILLISECONDS_IN_DAY = 86400000;
/**
* @name differenceInCalendarDays
* @category Day Helpers
* @summary Get the number of calendar days between the given dates.
*
* @description
* Get the number of calendar days between the given dates. This means that the times are removed
* from the dates and then the difference in days is calculated.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar days
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar days are between
* // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
* const result = differenceInCalendarDays(
* new Date(2012, 6, 2, 0, 0),
* new Date(2011, 6, 2, 23, 0)
* )
* //=> 366
* // How many calendar days are between
* // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
* const result = differenceInCalendarDays(
* new Date(2011, 6, 3, 0, 1),
* new Date(2011, 6, 2, 23, 59)
* )
* //=> 1
*/
function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {
(0, _index3.default)(2, arguments);
var startOfDayLeft = (0, _index2.default)(dirtyDateLeft);
var startOfDayRight = (0, _index2.default)(dirtyDateRight);
var timestampLeft = startOfDayLeft.getTime() - (0, _index.default)(startOfDayLeft);
var timestampRight = startOfDayRight.getTime() - (0, _index.default)(startOfDayRight);
// Round the number of days to the nearest integer
// because the number of milliseconds in a day is not constant
// (e.g. it's different in the day of the daylight saving time clock shift)
return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarDays/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarISOWeekYears } from 'date-fns'
export default differenceInCalendarISOWeekYears
@@ -0,0 +1,37 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarISOWeekYears;
var _index = _interopRequireDefault(require("../getISOWeekYear/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInCalendarISOWeekYears
* @category ISO Week-Numbering Year Helpers
* @summary Get the number of calendar ISO week-numbering years between the given dates.
*
* @description
* Get the number of calendar ISO week-numbering years between the given dates.
*
* ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar ISO week-numbering years
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?
* const result = differenceInCalendarISOWeekYears(
* new Date(2012, 0, 1),
* new Date(2010, 0, 1)
* )
* //=> 2
*/
function differenceInCalendarISOWeekYears(dirtyDateLeft, dirtyDateRight) {
(0, _index2.default)(2, arguments);
return (0, _index.default)(dirtyDateLeft) - (0, _index.default)(dirtyDateRight);
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarISOWeekYears/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarISOWeeks } from 'date-fns'
export default differenceInCalendarISOWeeks
@@ -0,0 +1,48 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarISOWeeks;
var _index = _interopRequireDefault(require("../_lib/getTimezoneOffsetInMilliseconds/index.js"));
var _index2 = _interopRequireDefault(require("../startOfISOWeek/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var MILLISECONDS_IN_WEEK = 604800000;
/**
* @name differenceInCalendarISOWeeks
* @category ISO Week Helpers
* @summary Get the number of calendar ISO weeks between the given dates.
*
* @description
* Get the number of calendar ISO weeks between the given dates.
*
* ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar ISO weeks
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?
* const result = differenceInCalendarISOWeeks(
* new Date(2014, 6, 21),
* new Date(2014, 6, 6)
* )
* //=> 3
*/
function differenceInCalendarISOWeeks(dirtyDateLeft, dirtyDateRight) {
(0, _index3.default)(2, arguments);
var startOfISOWeekLeft = (0, _index2.default)(dirtyDateLeft);
var startOfISOWeekRight = (0, _index2.default)(dirtyDateRight);
var timestampLeft = startOfISOWeekLeft.getTime() - (0, _index.default)(startOfISOWeekLeft);
var timestampRight = startOfISOWeekRight.getTime() - (0, _index.default)(startOfISOWeekRight);
// Round the number of days to the nearest integer
// because the number of milliseconds in a week is not constant
// (e.g. it's different in the week of the daylight saving time clock shift)
return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarISOWeeks/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarMonths } from 'date-fns'
export default differenceInCalendarMonths
+39
View File
@@ -0,0 +1,39 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarMonths;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInCalendarMonths
* @category Month Helpers
* @summary Get the number of calendar months between the given dates.
*
* @description
* Get the number of calendar months between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar months
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar months are between 31 January 2014 and 1 September 2014?
* const result = differenceInCalendarMonths(
* new Date(2014, 8, 1),
* new Date(2014, 0, 31)
* )
* //=> 8
*/
function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {
(0, _index2.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();
var monthDiff = dateLeft.getMonth() - dateRight.getMonth();
return yearDiff * 12 + monthDiff;
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarMonths/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarQuarters } from 'date-fns'
export default differenceInCalendarQuarters
@@ -0,0 +1,40 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarQuarters;
var _index = _interopRequireDefault(require("../getQuarter/index.js"));
var _index2 = _interopRequireDefault(require("../toDate/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInCalendarQuarters
* @category Quarter Helpers
* @summary Get the number of calendar quarters between the given dates.
*
* @description
* Get the number of calendar quarters between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar quarters
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar quarters are between 31 December 2013 and 2 July 2014?
* const result = differenceInCalendarQuarters(
* new Date(2014, 6, 2),
* new Date(2013, 11, 31)
* )
* //=> 3
*/
function differenceInCalendarQuarters(dirtyDateLeft, dirtyDateRight) {
(0, _index3.default)(2, arguments);
var dateLeft = (0, _index2.default)(dirtyDateLeft);
var dateRight = (0, _index2.default)(dirtyDateRight);
var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();
var quarterDiff = (0, _index.default)(dateLeft) - (0, _index.default)(dateRight);
return yearDiff * 4 + quarterDiff;
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarQuarters/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarWeeks } from 'date-fns'
export default differenceInCalendarWeeks
+60
View File
@@ -0,0 +1,60 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarWeeks;
var _index = _interopRequireDefault(require("../startOfWeek/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/getTimezoneOffsetInMilliseconds/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var MILLISECONDS_IN_WEEK = 604800000;
/**
* @name differenceInCalendarWeeks
* @category Week Helpers
* @summary Get the number of calendar weeks between the given dates.
*
* @description
* Get the number of calendar weeks between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @param {Object} [options] - an object with options.
* @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
* @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
* @returns {Number} the number of calendar weeks
* @throws {TypeError} 2 arguments required
* @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
*
* @example
* // How many calendar weeks are between 5 July 2014 and 20 July 2014?
* const result = differenceInCalendarWeeks(
* new Date(2014, 6, 20),
* new Date(2014, 6, 5)
* )
* //=> 3
*
* @example
* // If the week starts on Monday,
* // how many calendar weeks are between 5 July 2014 and 20 July 2014?
* const result = differenceInCalendarWeeks(
* new Date(2014, 6, 20),
* new Date(2014, 6, 5),
* { weekStartsOn: 1 }
* )
* //=> 2
*/
function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) {
(0, _index3.default)(2, arguments);
var startOfWeekLeft = (0, _index.default)(dirtyDateLeft, options);
var startOfWeekRight = (0, _index.default)(dirtyDateRight, options);
var timestampLeft = startOfWeekLeft.getTime() - (0, _index2.default)(startOfWeekLeft);
var timestampRight = startOfWeekRight.getTime() - (0, _index2.default)(startOfWeekRight);
// Round the number of days to the nearest integer
// because the number of milliseconds in a week is not constant
// (e.g. it's different in the week of the daylight saving time clock shift)
return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK);
}
module.exports = exports.default;
@@ -0,0 +1,59 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number,
options?: {
locale?: Locale,
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
}
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarWeeks/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInCalendarYears } from 'date-fns'
export default differenceInCalendarYears
+37
View File
@@ -0,0 +1,37 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInCalendarYears;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInCalendarYears
* @category Year Helpers
* @summary Get the number of calendar years between the given dates.
*
* @description
* Get the number of calendar years between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of calendar years
* @throws {TypeError} 2 arguments required
*
* @example
* // How many calendar years are between 31 December 2013 and 11 February 2015?
* const result = differenceInCalendarYears(
* new Date(2015, 1, 11),
* new Date(2013, 11, 31)
* )
* //=> 2
*/
function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {
(0, _index2.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
return dateLeft.getFullYear() - dateRight.getFullYear();
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInCalendarYears/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInDays } from 'date-fns'
export default differenceInDays
+91
View File
@@ -0,0 +1,91 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInDays;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../differenceInCalendarDays/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
// Like `compareAsc` but uses local time not UTC, which is needed
// for accurate equality comparisons of UTC timestamps that end up
// having the same representation in local time, e.g. one hour before
// DST ends vs. the instant that DST ends.
function compareLocalAsc(dateLeft, dateRight) {
var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1;
// Return 0 if diff is 0; return NaN if diff is NaN
} else {
return diff;
}
}
/**
* @name differenceInDays
* @category Day Helpers
* @summary Get the number of full days between the given dates.
*
* @description
* Get the number of full day periods between two dates. Fractional days are
* truncated towards zero.
*
* One "full day" is the distance between a local time in one day to the same
* local time on the next or previous day. A full day can sometimes be less than
* or more than 24 hours if a daylight savings change happens between two dates.
*
* To ignore DST and only measure exact 24-hour periods, use this instead:
* `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.
*
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full days according to the local timezone
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full days are between
* // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?
* const result = differenceInDays(
* new Date(2012, 6, 2, 0, 0),
* new Date(2011, 6, 2, 23, 0)
* )
* //=> 365
* // How many full days are between
* // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?
* const result = differenceInDays(
* new Date(2011, 6, 3, 0, 1),
* new Date(2011, 6, 2, 23, 59)
* )
* //=> 0
* // How many full days are between
* // 1 March 2020 0:00 and 1 June 2020 0:00 ?
* // Note: because local time is used, the
* // result will always be 92 days, even in
* // time zones where DST starts and the
* // period has only 92*24-1 hours.
* const result = differenceInDays(
* new Date(2020, 5, 1),
* new Date(2020, 2, 1)
* )
//=> 92
*/
function differenceInDays(dirtyDateLeft, dirtyDateRight) {
(0, _index3.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var sign = compareLocalAsc(dateLeft, dateRight);
var difference = Math.abs((0, _index2.default)(dateLeft, dateRight));
dateLeft.setDate(dateLeft.getDate() - sign * difference);
// Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full
// If so, result must be decreased by 1 in absolute value
var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);
var result = sign * (difference - isLastDayNotFull);
// Prevent negative zero
return result === 0 ? 0 : result;
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInDays/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInHours } from 'date-fns'
export default differenceInHours
+40
View File
@@ -0,0 +1,40 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInHours;
var _index = require("../constants/index.js");
var _index2 = _interopRequireDefault(require("../differenceInMilliseconds/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index4 = require("../_lib/roundingMethods/index.js");
/**
* @name differenceInHours
* @category Hour Helpers
* @summary Get the number of hours between the given dates.
*
* @description
* Get the number of hours between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @param {Object} [options] - an object with options.
* @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of hours
* @throws {TypeError} 2 arguments required
*
* @example
* // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?
* const result = differenceInHours(
* new Date(2014, 6, 2, 19, 0),
* new Date(2014, 6, 2, 6, 50)
* )
* //=> 12
*/
function differenceInHours(dateLeft, dateRight, options) {
(0, _index3.default)(2, arguments);
var diff = (0, _index2.default)(dateLeft, dateRight) / _index.millisecondsInHour;
return (0, _index4.getRoundingMethod)(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
module.exports = exports.default;
+58
View File
@@ -0,0 +1,58 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number,
options?: {
roundingMethod?: string,
}
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInHours/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInISOWeekYears } from 'date-fns'
export default differenceInISOWeekYears
+52
View File
@@ -0,0 +1,52 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInISOWeekYears;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../differenceInCalendarISOWeekYears/index.js"));
var _index3 = _interopRequireDefault(require("../compareAsc/index.js"));
var _index4 = _interopRequireDefault(require("../subISOWeekYears/index.js"));
var _index5 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInISOWeekYears
* @category ISO Week-Numbering Year Helpers
* @summary Get the number of full ISO week-numbering years between the given dates.
*
* @description
* Get the number of full ISO week-numbering years between the given dates.
*
* ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full ISO week-numbering years
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?
* const result = differenceInISOWeekYears(
* new Date(2012, 0, 1),
* new Date(2010, 0, 1)
* )
* //=> 1
*/
function differenceInISOWeekYears(dirtyDateLeft, dirtyDateRight) {
(0, _index5.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var sign = (0, _index3.default)(dateLeft, dateRight);
var difference = Math.abs((0, _index2.default)(dateLeft, dateRight));
dateLeft = (0, _index4.default)(dateLeft, sign * difference);
// Math.abs(diff in full ISO years - diff in calendar ISO years) === 1
// if last calendar ISO year is not full
// If so, result must be decreased by 1 in absolute value
var isLastISOWeekYearNotFull = Number((0, _index3.default)(dateLeft, dateRight) === -sign);
var result = sign * (difference - isLastISOWeekYearNotFull);
// Prevent negative zero
return result === 0 ? 0 : result;
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInISOWeekYears/index.js",
"typings": "../typings.d.ts"
}
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInMilliseconds } from 'date-fns'
export default differenceInMilliseconds
+36
View File
@@ -0,0 +1,36 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInMilliseconds;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInMilliseconds
* @category Millisecond Helpers
* @summary Get the number of milliseconds between the given dates.
*
* @description
* Get the number of milliseconds between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of milliseconds
* @throws {TypeError} 2 arguments required
*
* @example
* // How many milliseconds are between
* // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?
* const result = differenceInMilliseconds(
* new Date(2014, 6, 2, 12, 30, 21, 700),
* new Date(2014, 6, 2, 12, 30, 20, 600)
* )
* //=> 1100
*/
function differenceInMilliseconds(dateLeft, dateRight) {
(0, _index2.default)(2, arguments);
return (0, _index.default)(dateLeft).getTime() - (0, _index.default)(dateRight).getTime();
}
module.exports = exports.default;
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInMilliseconds/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInMinutes } from 'date-fns'
export default differenceInMinutes
+48
View File
@@ -0,0 +1,48 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInMinutes;
var _index = require("../constants/index.js");
var _index2 = _interopRequireDefault(require("../differenceInMilliseconds/index.js"));
var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index4 = require("../_lib/roundingMethods/index.js");
/**
* @name differenceInMinutes
* @category Minute Helpers
* @summary Get the number of minutes between the given dates.
*
* @description
* Get the signed number of full (rounded towards 0) minutes between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @param {Object} [options] - an object with options.
* @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of minutes
* @throws {TypeError} 2 arguments required
*
* @example
* // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?
* const result = differenceInMinutes(
* new Date(2014, 6, 2, 12, 20, 0),
* new Date(2014, 6, 2, 12, 7, 59)
* )
* //=> 12
*
* @example
* // How many minutes are between 10:01:59 and 10:00:00
* const result = differenceInMinutes(
* new Date(2000, 0, 1, 10, 0, 0),
* new Date(2000, 0, 1, 10, 1, 59)
* )
* //=> -1
*/
function differenceInMinutes(dateLeft, dateRight, options) {
(0, _index3.default)(2, arguments);
var diff = (0, _index2.default)(dateLeft, dateRight) / _index.millisecondsInMinute;
return (0, _index4.getRoundingMethod)(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
module.exports = exports.default;
+58
View File
@@ -0,0 +1,58 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number,
options?: {
roundingMethod?: string,
}
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInMinutes/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInMonths } from 'date-fns'
export default differenceInMonths
+64
View File
@@ -0,0 +1,64 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInMonths;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../differenceInCalendarMonths/index.js"));
var _index3 = _interopRequireDefault(require("../compareAsc/index.js"));
var _index4 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index5 = _interopRequireDefault(require("../isLastDayOfMonth/index.js"));
/**
* @name differenceInMonths
* @category Month Helpers
* @summary Get the number of full months between the given dates.
*
* @description
* Get the number of full months between the given dates using trunc as a default rounding method.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full months
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full months are between 31 January 2014 and 1 September 2014?
* const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))
* //=> 7
*/
function differenceInMonths(dirtyDateLeft, dirtyDateRight) {
(0, _index4.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var sign = (0, _index3.default)(dateLeft, dateRight);
var difference = Math.abs((0, _index2.default)(dateLeft, dateRight));
var result;
// Check for the difference of less than month
if (difference < 1) {
result = 0;
} else {
if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {
// This will check if the date is end of Feb and assign a higher end of month date
// to compare it with Jan
dateLeft.setDate(30);
}
dateLeft.setMonth(dateLeft.getMonth() - sign * difference);
// Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full
// If so, result must be decreased by 1 in absolute value
var isLastMonthNotFull = (0, _index3.default)(dateLeft, dateRight) === -sign;
// Check for cases of one full calendar month
if ((0, _index5.default)((0, _index.default)(dirtyDateLeft)) && difference === 1 && (0, _index3.default)(dirtyDateLeft, dateRight) === 1) {
isLastMonthNotFull = false;
}
result = sign * (difference - Number(isLastMonthNotFull));
}
// Prevent negative zero
return result === 0 ? 0 : result;
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInMonths/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInQuarters } from 'date-fns'
export default differenceInQuarters
+36
View File
@@ -0,0 +1,36 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInQuarters;
var _index = _interopRequireDefault(require("../differenceInMonths/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index3 = require("../_lib/roundingMethods/index.js");
/**
* @name differenceInQuarters
* @category Quarter Helpers
* @summary Get the number of quarters between the given dates.
*
* @description
* Get the number of quarters between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @param {Object} [options] - an object with options.
* @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of full quarters
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full quarters are between 31 December 2013 and 2 July 2014?
* const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))
* //=> 2
*/
function differenceInQuarters(dateLeft, dateRight, options) {
(0, _index2.default)(2, arguments);
var diff = (0, _index.default)(dateLeft, dateRight) / 3;
return (0, _index3.getRoundingMethod)(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
module.exports = exports.default;
+58
View File
@@ -0,0 +1,58 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number,
options?: {
roundingMethod?: string,
}
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInQuarters/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInSeconds } from 'date-fns'
export default differenceInSeconds
+40
View File
@@ -0,0 +1,40 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInSeconds;
var _index = _interopRequireDefault(require("../differenceInMilliseconds/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index3 = require("../_lib/roundingMethods/index.js");
/**
* @name differenceInSeconds
* @category Second Helpers
* @summary Get the number of seconds between the given dates.
*
* @description
* Get the number of seconds between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @param {Object} [options] - an object with options.
* @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of seconds
* @throws {TypeError} 2 arguments required
*
* @example
* // How many seconds are between
* // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?
* const result = differenceInSeconds(
* new Date(2014, 6, 2, 12, 30, 20, 0),
* new Date(2014, 6, 2, 12, 30, 7, 999)
* )
* //=> 12
*/
function differenceInSeconds(dateLeft, dateRight, options) {
(0, _index2.default)(2, arguments);
var diff = (0, _index.default)(dateLeft, dateRight) / 1000;
return (0, _index3.getRoundingMethod)(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
module.exports = exports.default;
+58
View File
@@ -0,0 +1,58 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number,
options?: {
roundingMethod?: string,
}
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInSeconds/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInWeeks } from 'date-fns'
export default differenceInWeeks
+57
View File
@@ -0,0 +1,57 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInWeeks;
var _index = _interopRequireDefault(require("../differenceInDays/index.js"));
var _index2 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
var _index3 = require("../_lib/roundingMethods/index.js");
/**
* @name differenceInWeeks
* @category Week Helpers
* @summary Get the number of full weeks between the given dates.
*
* @description
* Get the number of full weeks between two dates. Fractional weeks are
* truncated towards zero by default.
*
* One "full week" is the distance between a local time in one day to the same
* local time 7 days earlier or later. A full week can sometimes be less than
* or more than 7*24 hours if a daylight savings change happens between two dates.
*
* To ignore DST and only measure exact 7*24-hour periods, use this instead:
* `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.
*
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @param {Object} [options] - an object with options.
* @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)
* @returns {Number} the number of full weeks
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full weeks are between 5 July 2014 and 20 July 2014?
* const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))
* //=> 2
*
* // How many full weeks are between
* // 1 March 2020 0:00 and 6 June 2020 0:00 ?
* // Note: because local time is used, the
* // result will always be 8 weeks (54 days),
* // even if DST starts and the period has
* // only 54*24-1 hours.
* const result = differenceInWeeks(
* new Date(2020, 5, 1),
* new Date(2020, 2, 6)
* )
* //=> 8
*/
function differenceInWeeks(dateLeft, dateRight, options) {
(0, _index2.default)(2, arguments);
var diff = (0, _index.default)(dateLeft, dateRight) / 7;
return (0, _index3.getRoundingMethod)(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);
}
module.exports = exports.default;
+58
View File
@@ -0,0 +1,58 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number,
options?: {
roundingMethod?: string,
}
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInWeeks/index.js",
"typings": "../typings.d.ts"
}
+4
View File
@@ -0,0 +1,4 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { differenceInYears } from 'date-fns'
export default differenceInYears
+49
View File
@@ -0,0 +1,49 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = differenceInYears;
var _index = _interopRequireDefault(require("../toDate/index.js"));
var _index2 = _interopRequireDefault(require("../differenceInCalendarYears/index.js"));
var _index3 = _interopRequireDefault(require("../compareAsc/index.js"));
var _index4 = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
/**
* @name differenceInYears
* @category Year Helpers
* @summary Get the number of full years between the given dates.
*
* @description
* Get the number of full years between the given dates.
*
* @param {Date|Number} dateLeft - the later date
* @param {Date|Number} dateRight - the earlier date
* @returns {Number} the number of full years
* @throws {TypeError} 2 arguments required
*
* @example
* // How many full years are between 31 December 2013 and 11 February 2015?
* const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))
* //=> 1
*/
function differenceInYears(dirtyDateLeft, dirtyDateRight) {
(0, _index4.default)(2, arguments);
var dateLeft = (0, _index.default)(dirtyDateLeft);
var dateRight = (0, _index.default)(dirtyDateRight);
var sign = (0, _index3.default)(dateLeft, dateRight);
var difference = Math.abs((0, _index2.default)(dateLeft, dateRight));
// Set both dates to a valid leap year for accurate comparison when dealing
// with leap days
dateLeft.setFullYear(1584);
dateRight.setFullYear(1584);
// Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full
// If so, result must be decreased by 1 in absolute value
var isLastYearNotFull = (0, _index3.default)(dateLeft, dateRight) === -sign;
var result = sign * (difference - Number(isLastYearNotFull));
// Prevent negative zero
return result === 0 ? 0 : result;
}
module.exports = exports.default;
+55
View File
@@ -0,0 +1,55 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Interval = {
start: Date | number,
end: Date | number,
}
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
export type Duration = {
years?: number,
months?: number,
weeks?: number,
days?: number,
hours?: number,
minutes?: number,
seconds?: number,
}
export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6
declare module.exports: (
dateLeft: Date | number,
dateRight: Date | number
) => number
+5
View File
@@ -0,0 +1,5 @@
{
"sideEffects": false,
"module": "../esm/differenceInYears/index.js",
"typings": "../typings.d.ts"
}
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
rules: {
'no-console': 'off'
}
}
+15
View File
@@ -0,0 +1,15 @@
/**
* @category Types
* @summary Day type
*
* @description
* The day of the week type alias (`0 | 1 | 2 | 3 | 4 | 5 | 6`). Unlike the date
* (the number of days since the beginningof the month), which starts with 1
* and is dynamic (can go up to 28, 30, or 31), the day starts with 0 and static
* (always ends at 6). Look at it as an index in an array where Sunday is
* the first element, and Saturday is the last.
*
* @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6} Day
*/
const Day = 0
module.exports = Day
+19
View File
@@ -0,0 +1,19 @@
/**
* @category Types
* @summary Duration object
*
* @description
* Duration object.
*
* @typedef {Object} Duration
*
* @property {number} [years]
* @property {number} [months]
* @property {number} [weeks]
* @property {number} [days]
* @property {number} [hours]
* @property {number} [minutes]
* @property {number} [seconds]
*/
const Duration = {}
module.exports = Duration
+16
View File
@@ -0,0 +1,16 @@
/**
* @category Types
* @summary An object that combines two dates to represent the time interval.
*
* @description
* An object that combines two dates to represent the time interval.
*
* @typedef {Object} Interval
* @property {Date|Number} start - the start of the interval
* @property {Date|Number} end - the end of the interval
* @throws {RangeError} The start of an interval cannot be after its end
* @throws {RangeError} Date in interval cannot be `Invalid Date`
*/
var Interval = {}
module.exports = Interval
+88
View File
@@ -0,0 +1,88 @@
/**
* @category Types
* @summary A locale object. Default locale is `en-US`.
*
* @description
* A locale object. Default locale is `en-US`.
*
* If you're using any of these date-fns, consider specifying a locale in options:
*
* - `differenceInCalendarWeeks`
* - `eachWeekOfInterval`
* - `endOfWeek`
* - `format`
* - `formatDistance`
* - `formatDistanceStrict`
* - `formatRelative`
* - `getWeek`
* - `getWeekOfMonth`
* - `getWeeksInMonth`
* - `getWeekYear`
* - `isMatch`
* - `isSameWeek`
* - `isThisWeek`
* - `lastDayOfWeek`
* - `parse`
* - `setDay`
* - `setWeek`
* - `setWeekYear`
* - `startOfWeek`
* - `startOfWeekYear`
*
* Read the Properties section below for more details.
*
* @typedef {Object} Locale
*
* @property {string} [code] - the locale code (ISO 639-1 + optional country code)
* @property {Function} [formatDistance] - the function that takes a token
* passed by `formatDistance` or `formatDistanceStrict` and payload,
* and returns localized distance in words.
* Required by `formatDistance` and `formatDistanceStrict`
*
* @property {Function} [formatRelative] - the function that takes a token
* passed by `formatRelative` and two dates and returns the localized relative date format.
* Required by `formatRelative`
*
* @property {Object} [localize] - the object with functions used to localize various values.
* Required by `format` and `formatRelative`
* @property {Function} localize.ordinalNumber - the function that localizes an ordinal number
* @property {Function} localize.era - the function that takes 0 or 1 and returns localized era
* @property {Function} localize.quarter - the function that localizes a quarter
* @property {Function} localize.month - the function that localizes a month
* @property {Function} localize.day - the function that localizes a day of the week
* @property {Function} localize.dayPeriod - the function that takes one of the strings
* 'am', 'pm', 'midnight', 'noon', 'morning', 'afternoon', 'evening' or 'night'
* and returns localized time of the day
*
* @property {Object} [formatLong] - the object with functions that return localized formats
* @property {Function} formatLong.date - the function that returns a localized long date format
* @property {Function} formatLong.time - the function that returns a localized long time format
* @property {Function} formatLong.dateTime - the function that returns a localized format of date and time combined
*
* @property {Object} [match] — the object with functions used to match and parse various localized values.
* Required by `parse`
* @property {Function} match.ordinalNumber - the function that parses a localized ordinal number
* @property {Function} match.era - the function that parses a localized era
* @property {Function} match.quarter - the function that parses a localized quarter
* @property {Function} match.month - the function that parses a localized month
* @property {Function} match.day - the function that parses a localized day of the week
* @property {Function} match.dayPeriod - the function that parses a localized time of the day
*
* @property {Object} [options] - an object with locale options.
* @property {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday).
* Used by `differenceInCalendarWeeks`, `eachWeekOfInterval`, `endOfWeek`, `format`, `formatRelative`, `getWeek`, `getWeekOfMonth`,
* `getWeeksInMonth`, `getWeekYear`, `isMatch`, `isSameWeek`, `isThisWeek`, `lastDayOfWeek`, `parse`, `setDay`,
* `setWeek`, `setWeekYear`, `startOfWeek` and `startOfWeekYear`
* @property {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January,
* which is always in the first week of the year.
* Used by `format`, `getWeek`, `getWeekYear`, `isMatch`, `parse`, `setWeek`, `setWeekYear` and `startOfWeekYear`.
*
* @throws {RangeError} `locale` must contain `localize` property. Thrown by `format` and `formatRelative`
* @throws {RangeError} `locale` must contain `formatLong` property. Thrown by `format` and `formatRelative`
* @throws {RangeError} `locale` must contain `formatRelative` property. Thrown by `formatRelative`
* @throws {RangeError} `locale` must contain `formatDistance` property. Thrown by `formatDistance` and `formatDistanceStrict`
* @throws {RangeError} `locale` must contain `match` property. Thrown by `parse`
*/
var Locale = {}
module.exports = Locale
+47
View File
@@ -0,0 +1,47 @@
# Constants
date-fns provides with a number of useful constants.
## Usage
The constants could be imported from `date-fns/constants` or directly
from `date-fns`:
```js
import { maxTime } from 'date-fns/constants'
import { minTime } from 'date-fns'
function isAllowedTime(time) {
return time <= maxTime && time >= minTime
}
```
## Constants
### `maxTime`
Maximum allowed time:
```js
import { maxTime } from 'date-fns'
const isValid = 8640000000000001 <= maxTime
//=> false
new Date(8640000000000001)
//=> Invalid Date
```
### `minTime`
Minimum allowed time:
```js
import { minTime } from 'date-fns'
const isValid = -8640000000000001 >= minTime
//=> false
new Date(-8640000000000001)
//=> Invalid Date
```
+24
View File
@@ -0,0 +1,24 @@
# ECMAScript Modules
**date-fns** v2.x provides support for
[ECMAScript Modules](http://www.ecma-international.org/ecma-262/6.0/#sec-modules)
that enables tree-shaking for bundlers, like [rollup.js](http://rollupjs.org)
and [webpack](https://webpack.js.org).
If you have tree-shaking enabled in your bundler, just import functions normally:
```javascript
import { format, parse } from 'date-fns'
import { enUS, eo } from 'date-fns/locale'
import { addDays, addHours } from 'date-fns/fp'
```
In TypeScript, now you can import individual functions in more idiomatic way:
```typescript
// Before
import * as format from 'date-fns/format'
// Now
import format from 'date-fns/format'
```
+70
View File
@@ -0,0 +1,70 @@
# FP Guide
**date-fns** v2.x provides [functional programming](https://en.wikipedia.org/wiki/Functional_programming) (FP)
friendly functions, like those in [lodash](https://github.com/lodash/lodash/wiki/FP-Guide),
that support [currying](https://en.wikipedia.org/wiki/Currying).
## Table of Contents
- [Usage](#usage)
- [Using Function Composition](#using-function-composition)
## Usage
FP functions are provided via `'date-fns/fp'` submodule.
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 **date-fns'** FP functions, the order of arguments is reversed.
```javascript
import { addYears, formatWithOptions } from 'date-fns/fp'
import { eo } from 'date-fns/locale'
import toUpper from 'lodash/fp/toUpper' // 'date-fns/fp' is compatible with 'lodash/fp'!
// 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(addFiveYears).map(dateToString).map(toUpper)
//=> ['1 JANUARO 2022', '11 FEBRUARO 2022', '2 JULIO 2022']
```
## Using Function Composition
The main advantage of FP functions is support of functional-style
[function composing](https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba).
In the example above, you can compose `addFiveYears`, `dateToString` and `toUpper` into a single function:
```javascript
const formattedDates = dates.map((date) => toUpper(dateToString(addFiveYears(date))))
```
Or you can use `compose` function provided by [lodash](https://lodash.com) to do the same in more idiomatic way:
```javascript
import compose from 'lodash/fp/compose'
const formattedDates = dates.map(compose(toUpper, dateToString, addFiveYears))
```
Or if you prefer natural direction of composing (as opposed to the computationally correct order),
you can use lodash' `flow` instead:
```javascript
import flow from 'lodash/fp/flow'
const formattedDates = dates.map(flow(addFiveYears, dateToString, toUpper))
```
+87
View File
@@ -0,0 +1,87 @@
# Getting Started
## Table of Contents
- [Introduction](#introduction)
- [Submodules](#submodules)
- [Installation](#installation)
## Introduction
**date-fns** provides the most comprehensive, yet simple and consistent toolset
for manipulating **JavaScript dates** in **a browser** & **Node.js**.
**date-fns** is like [lodash](https://lodash.com) for dates. It has
[**200+ functions** for all occasions](https://date-fns.org/docs/).
```js
import { format, compareAsc } from 'date-fns'
format(new Date(2014, 1, 11), 'MM/dd/yyyy')
//=> '02/11/2014'
const dates = [
new Date(1995, 6, 2),
new Date(1987, 1, 11),
new Date(1989, 6, 10),
]
dates.sort(compareAsc)
//=> [
// Wed Feb 11 1987 00:00:00,
// Mon Jul 10 1989 00:00:00,
// Sun Jul 02 1995 00:00:00
// ]
```
## Submodules
**date-fns** includes some optional features as submodules in the npm package.
Here is the list of them, in order of nesting:
- FP — functional programming-friendly variations of the functions. See [FP Guide](https://date-fns.org/docs/FP-Guide);
- UTC (in development) — variations of the functions which calculate dates in UTC±00:00 timezone.
The later submodules are also included inside the former if you want to use multiple features from the list.
To use submodule features, [install the npm package](#npm) and then import a function from a submodule:
```js
// The main submodule:
import addDays from 'date-fns/addDays'
// FP variation:
import addDays from 'date-fns/fp/addDays'
// UTC variation:
import addDays from 'date-fns/utc/addDays'
// Both FP and UTC:
import addDays from 'date-fns/fp/utc/addDays'
// With tree-shaking enabled:
import { addDays, format } from 'date-fns/fp'
```
## Installation
The library is available as an [npm package](https://www.npmjs.com/package/date-fns).
To install the package, run:
```bash
npm install date-fns --save
# or
yarn add date-fns
```
Start using:
```js
import { formatDistance, subDays } from 'date-fns'
formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true })
//=> "3 days ago"
```
+92
View File
@@ -0,0 +1,92 @@
# Internationalization
## Table of Contents
- [Usage](#usage)
- [Adding New Language](#adding-new-language)
## Usage
There are just a few functions that support I18n:
- [`format`](https://date-fns.org/docs/format)
- [`formatDistance`](https://date-fns.org/docs/formatDistance)
- [`formatDistanceStrict`](https://date-fns.org/docs/formatDistanceStrict)
- [`formatRelative`](https://date-fns.org/docs/formatRelative)
To use a locale, you need to require it and then pass
as an option to a function:
```js
import { formatDistance } from 'date-fns'
// Require Esperanto locale
import { eo } from 'date-fns/locale'
const result = formatDistance(
new Date(2016, 7, 1),
new Date(2015, 0, 1),
{locale: eo} // Pass the locale as an option
)
//=> 'pli ol 1 jaro'
```
It might seem complicated to require and pass locales as options,
but unlike Moment.js which bloats your build with all the locales
by default date-fns forces developer to manually require locales when needed.
To make API simple, we encourage you to write tiny wrappers and use those
instead of original functions:
```js
// app/_lib/format.js
import { format } from 'date-fns'
import { enGB, eo, ru } from 'date-fns/locale'
const locales = {enGB, eo, ru}
// by providing a default string of 'PP' or any of its variants for `formatStr`
// it will format dates in whichever way is appropriate to the locale
export default function (date, formatStr = 'PP') {
return format(date, formatStr, {
locale: locales[window.__localeId__] // or global.__localeId__
})
}
// Later:
import format from 'app/_lib/format'
window.__localeId__ = 'enGB'
format(friday13, 'EEEE d')
//=> 'Friday 13'
window.__localeId__ = 'eo'
format(friday13, 'EEEE d')
//=> 'vendredo 13'
// If the format string is omitted, it will take the default for the locale.
window.__localeId__ = 'enGB'
format(friday13)
//=> Jul 13, 2019
window.__localeId__ = 'eo'
format(friday13)
//=> 2019-jul-13
```
## Adding New Language
At the moment there is no definitive guide, so if you feel brave enough,
use this quick guide:
- First of all, [create an issue](https://github.com/date-fns/date-fns/issues/new?title=XXX%20language%20support)
so you won't overlap with others.
- A detailed explanation of how to [add a new locale](https://github.com/date-fns/date-fns/blob/master/docs/i18nContributionGuide.md#adding-a-new-locale).
- Use [English locale](https://github.com/date-fns/date-fns/tree/master/src/locale/en-US)
as the basis and then incrementally adjust the tests and the code.
- Directions on [adding a locale with the same language as another locale](https://github.com/date-fns/date-fns/blob/master/docs/i18nContributionGuide.md#creating-a-locale-with-the-same-language-as-another-locale).
- If you have questions or need guidance, leave a comment in the issue.
Thank you for your support!
+921
View File
@@ -0,0 +1,921 @@
# I18n Contribution Guide
## Table of Contents
- [Adding a new locale](#adding-a-new-locale)
- [Choosing a directory name for a locale](#choosing-a-directory-name-for-a-locale)
- [index.js](#index.js)
- [localize](#localize)
- [localize.ordinalNumber](#localize.ordinalnumber)
- [localize.era and using buildLocalizeFn function](#localize.era-and-using-buildlocalizefn-function)
- [Formatting localizers](#formatting-localizers)
- [localize.quarter](#localize.quarter)
- [localize.month](#localize.month)
- [localize.day](#localize.day)
- [localize.dayPeriod](#localize.dayperiod)
- [formatLong](#formatlong)
- [formatLong.dateFormats](#formatlong.dateformats)
- [formatLong.timeFormats](#formatlong.timeformats)
- [formatLong.dateTimeFormats](#formatlong.datetimeformats)
- [formatRelative](#formatrelative)
- [match](#match)
- [formatDistance](#formatdistance)
- [Tests](#tests)
- [Creating a locale with the same language as another locale](#creating-a-locale-with-the-same-language-as-another-locale)
## Adding a new locale
To add a new locale:
- [Choose a directory name for it](#choosing-a-directory-name-for-a-locale).
- Copy the content of an existing locale (e.g. `en-US`) into the newly created directory.
- Replace the values in the content with yours file-by-file.
Use [CLDR data](https://www.unicode.org/cldr/charts/32/summary/root.html)
as a point of reference which values to choose.
All locales contain a number of properties:
- [`formatDistance`](#formatdistance) — distance localizer function used by `formatDistance` and `formatDistanceStrict`.
- [`formatLong`](#formatlong) — contains long date localizer functions used by `format` and `formatRelative`.
- [`formatRelative`](#formatrelative) — relative date localizer function used by `formatRelative`.
- [`localize`](#localize) — contains functions, which localize the various date values. Required by `format` and `formatRelative`.
- [`match`](#match) — contains functions to parse date values. Required by `parse`.
- [`options`](#indexjs) — contains the index of the first day of the week for functions such as `startOfWeek`,
and the value which determines the first week of the year
for functions like `setWeek`.
### Choosing a directory name for a locale
Use the four letter code for the directory name (e.g. `en-GB`),
Use the two/three letter code:
- if the language code and the country code are the same (e.g. `pt` instead of `pt-PT`).
- if the language is used in only one country (e.g. `fil` instead of `fil-PH`).
- if all countries who use the language
also use the same regional standards: the first day of the week,
the week numbering (see: https://en.wikipedia.org/wiki/Week#Week_numbering),
calendar date format (see: https://en.wikipedia.org/wiki/Calendar_date)
and date representation (see: https://en.wikipedia.org/wiki/Date_and_time_representation_by_country
and: https://en.wikipedia.org/wiki/Date_format_by_country)
(e.g. `ca` instead of `ca-ES` and `ca-AD`).
### index.js
Locale's `index.js` is where all the properties of the locale are combined in a single file,
documented in JSDoc format.
```javascript
import formatDistance from './_lib/formatDistance/index.js'
import formatLong from './_lib/formatLong/index.js'
import formatRelative from './_lib/formatRelative/index.js'
import localize from './_lib/localize/index.js'
import match from './_lib/match/index.js'
/**
* @type {Locale}
* @category Locales
*
* // Name of the locale.
* // Inside the parentheses - name of the country - if the locale uses the four letter code, e.g. en-US, fr-CA or pt-BR.
* @summary English locale (United States).
*
* // Name of the language (used by https://date-fns.org/ website)
* @language English
*
* // ISO 639-2 code. See the list here:
* // https://www.loc.gov/standards/iso639-2/php/code_list.php
* // Used by https://date-fns.org/ to detect the list of the countries that uses the language.
* @iso-639-2 eng
*
* // Authors of the locale (including anyone who corrected or fixed the locale)
* @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
* @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
*/
var locale = {
code: 'en',
formatDistance: formatDistance,
formatLong: formatLong,
formatRelative: formatRelative,
localize: localize,
match: match,
options: {
// Index of the first day of the week.
// Sunday is 0, Monday is 1, Saturday is 6.
weekStartsOn: 0,
// Nth of January which is always in the first week of the year. See:
// https://en.wikipedia.org/wiki/Week#Week_numbering
// http://www.pjh2.de/datetime/weeknumber/wnd.php?l=en
firstWeekContainsDate: 1
}
}
export default locale
```
### localize
Put this object in `_lib/localize/index.js` inside your locale directory.
Contains a number of functions for used by `format`:
```js
var localize = {
ordinalNumber,
era,
quarter,
month,
day,
dayPeriod
}
export default localize
```
#### localize.ordinalNumber
Function that takes a numeric argument and returns a string with ordinal number:
```js
// In `en-US` locale:
function ordinalNumber (dirtyNumber, dirtyOptions) {
var number = Number(dirtyNumber)
var rem100 = number % 100
if (rem100 > 20 || rem100 < 10) {
switch (rem100 % 10) {
case 1:
return number + 'st'
case 2:
return number + 'nd'
case 3:
return number + 'rd'
}
}
return number + 'th'
}
var localize = {
ordinalNumber: ordinalNumber,
// ...
}
```
If the form of the ordinal number depends on the grammatical case (or other grammatical structures),
use `options.unit` argument which could be one of the values 'year', 'quarter', 'month', 'week',
'date', 'dayOfYear', 'day', 'hour', 'minute' or 'second':
```js
// In `ru` locale:
function ordinalNumber (dirtyNumber, dirtyOptions) {
var options = dirtyOptions || {}
var unit = String(options.unit)
var suffix
if (unit === 'date') {
suffix = '-е'
} else if (unit === 'week' || unit === 'minute' || unit === 'second') {
suffix = '-я'
} else {
suffix = '-й'
}
return dirtyNumber + suffix
}
```
#### localize.era and using buildLocalizeFn function
Localizes a numeric era. Takes either 0 or 1 as the first argument.
As with many of the `localize` functions, they can be generated by built-in
`buildLocalizeFn` function.
From the CLDR chart, use ['Date & Time'/'Gregorian'/'Eras'](https://www.unicode.org/cldr/charts/32/summary/en.html#1771) values.
```js
// In `en-US` locale:
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
var eraValues = {
narrow: ['B', 'A'],
abbreviated: ['BC', 'AD'],
wide: ['Before Christ', 'Anno Domini']
}
var localize = {
// ...
era: buildLocalizeFn({
values: eraValues,
defaultWidth: 'wide'
}),
// ...
}
export default localize
```
General usage of the function:
```js
var result = locale.localize.era(1, {width: 'abbreviated'})
//=> 'AD'
```
If `width` is not provided or the `values` object does not contain values for the provided width,
`defaultWidth` will be used. `defaultWidth` should indicate the longest form of the localized value.
The same is true for all other `localize` functions.
`width` for `localize.era` function could be either 'narrow', 'abbreviated' or 'wide'.
```js
var result = locale.localize.era(1, {width: 'foobar'})
//=> 'Anno Domini'
```
#### Formatting localizers
For some languages, there is a difference between "stand-alone" localizers and "formatting" localizers.
"Stand-alone" means that the resulting value should make grammatical sense without context.
"Formatting" means that the resulting value should be declined using the grammar rules of the language
as if the value was a part of a date.
For example, for languages with grammatical cases, the stand-alone month could be in the nominative case ("January"),
and the formatting month could decline as a part of the phrase "1st of January".
In this case, use parameters `formattingValues` and `defaultFormattingWidth` of `buildLocalizeFn` function.
Any localizer could be stand-alone and formatting.
Check the CLDR chart for the unit to see if stand-alone and formatting values are different for a certain unit.
If there's no difference (usually it happens in languages without grammatical cases),
parameters `formattingValues` and `defaultFormattingWidth` are not needed.
In this example, in Russian language a stand-alone month is in the nominative case ("январь"),
and formatting month is in the genitive case ("января" as in "1-е января"). Notice the different endings:
```js
// In `ru` locale:
var monthValues = {
narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],
abbreviated: ['янв.', 'фев.', 'март', 'апр.', 'май', 'июнь', 'июль', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'],
wide: ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь']
}
var formattingMonthValues = {
narrow: ['Я', 'Ф', 'М', 'А', 'М', 'И', 'И', 'А', 'С', 'О', 'Н', 'Д'],
abbreviated: ['янв.', 'фев.', 'мар.', 'апр.', 'мая', 'июн.', 'июл.', 'авг.', 'сент.', 'окт.', 'нояб.', 'дек.'],
wide: ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря']
}
var localize = {
// ...
month: buildLocalizeFn({
values: monthValues,
defaultWidth: 'wide',
formattingValues: formattingMonthValues,
defaultFormattingWidth: 'wide'
}),
// ...
}
export default localize
```
#### localize.quarter
Localizes a quarter. Takes 1, 2, 3 or 4 as the first argument.
`width` could be either 'narrow', 'abbreviated' or 'wide'.
From the CLDR chart, use ['Date & Time'/'Gregorian'/'Quarters'](https://www.unicode.org/cldr/charts/32/summary/en.html#1781) values.
```js
// In `en-US` locale:
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
var quarterValues = {
narrow: ['1', '2', '3', '4'],
abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']
}
var localize = {
// ...
quarter: buildLocalizeFn({
values: quarterValues,
defaultWidth: 'wide',
argumentCallback: function (quarter) {
return Number(quarter) - 1
}
}),
// ...
}
export default localize
```
Note the usage of `argumentCallback` here. It converts the value passed into `localize.quarter` function
(one of 1, 2, 3 or 4) into the index of the values array inside `quarterValues` (one of 0, 1, 2 or 3).
#### localize.month
Localizes a month. Takes numbers between 0 (for January) and 11 (for December).
`width` could be either 'narrow', 'abbreviated' or 'wide'.
From the CLDR chart, use ['Date & Time'/'Gregorian'/'Months'](https://www.unicode.org/cldr/charts/32/summary/en.html#1793) values.
```js
// In `en-US` locale:
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
var monthValues = {
narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
}
var localize = {
// ...
month: buildLocalizeFn({
values: monthValues,
defaultWidth: 'wide'
}),
// ...
}
export default localize
```
**NOTE**: in English, the names of days of the week and months are capitalized.
Check if the same is true for the language you're working on.
Generally, formatted dates should look like they are in the middle of a sentence,
e.g. in Spanish language the weekdays and months should be in the lowercase:
```js
// In `es` locale:
var monthValues = {
narrow: ['E', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
abbreviated: ['ene.', 'feb.', 'mar.', 'abr.', 'may.', 'jun.', 'jul.', 'ago.', 'sep.', 'oct.', 'nov.', 'dic.'],
wide: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
}
```
`monthValues.narrow` are usually capitalized in every language. Check the CLDR chart for your language.
#### localize.day
Localizes a week day. Takes numbers between 0 (for Sunday) and 6 (for Saturday).
`width` could be either 'narrow', 'short', 'abbreviated' or 'wide'.
From the CLDR chart, use ['Date & Time'/'Gregorian'/'Days'](https://www.unicode.org/cldr/charts/32/summary/en.html#1829) values.
```js
// In `en-US` locale:
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
var dayValues = {
narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
}
var localize = {
// ...
day: buildLocalizeFn({
values: dayValues,
defaultWidth: 'wide'
}),
// ...
}
export default localize
```
**NOTE**: the rules of capitalization from `localize.month` are also true for `localize.day`.
#### localize.dayPeriod
Localizes a certain day period.
Could take one of these strings as the argument: 'am', 'pm', 'midnight', 'noon', 'morning', 'afternoon', 'evening', 'night'.
`width` could be either 'narrow', 'abbreviated' or 'wide'.
From the CLDR chart, use ['Date & Time'/'Gregorian'/'Day periods'](https://www.unicode.org/cldr/charts/32/summary/en.html#1857) values.
```js
// In `en-US` locale:
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'
var dayPeriodValues = {
narrow: {
am: 'a',
pm: 'p',
midnight: 'mi',
noon: 'n',
morning: 'in the morning',
afternoon: 'in the afternoon',
evening: 'in the evening',
night: 'at night'
},
abbreviated: {
am: 'AM',
pm: 'PM',
midnight: 'midnight',
noon: 'noon',
morning: 'in the morning',
afternoon: 'in the afternoon',
evening: 'in the evening',
night: 'at night'
},
wide: {
am: 'a.m.',
pm: 'p.m.',
midnight: 'midnight',
noon: 'noon',
morning: 'in the morning',
afternoon: 'in the afternoon',
evening: 'in the evening',
night: 'at night'
}
}
var localize = {
// ...
dayPeriod: buildLocalizeFn({
values: dayPeriodValues,
defaultWidth: 'wide'
})
}
export default localize
```
### formatLong
Put this object in `_lib/formatLong/index.js` inside your locale directory.
Locale date formats written in `format` token string format.
See the list of tokens: https://date-fns.org/docs/format
Use https://en.wikipedia.org/wiki/Date_format_by_country and CLDR chart as the reference.
#### formatLong.dateFormats
Use ['Date & Time'/'Gregorian'/'Formats - Standard - Date Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1901) values
from the CLDR chart as a reference.
```js
// In `en-US` locale
import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'
var dateFormats = {
full: 'EEEE, MMMM do, y',
long: 'MMMM do, y',
medium: 'MMM d, y',
short: 'MM/dd/yyyy'
}
var formatLong = {
date: buildFormatLongFn({
formats: dateFormats,
defaultWidth: 'full'
}),
// ...
}
export default formatLong
```
`dateFormats.long` usually contains the longest form of writing the year, the month, and the day of the month.
Use ordinal day of the month ('do' token) where applicable (date-fns, unlike CLDR supports ordinal numbers).
`dateFormats.full` contains the same but with the day of the week.
`dateFormats.medium` contains the same values as `dateFormats.long`, but with short form of month and non-ordinal day.
`dateFormats.short` usually contains a strictly numerical form of the date.
Pay attention to the order of units (big-, little- or middle-endian)
#### formatLong.timeFormats
Use ['Date & Time'/'Gregorian'/'Formats - Standard - Time Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1906) values
from the CLDR chart as a reference.
Use some variation of 'h:mm aa' for 12-hour clock locales or 'H:mm' for 24-hour clock locales. Use the local time separator.
```js
// In `en-US` locale
import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'
var timeFormats = {
full: 'h:mm:ss a zzzz',
long: 'h:mm:ss a z',
medium: 'h:mm:ss a',
short: 'h:mm a'
}
var formatLong = {
// ...
time: buildFormatLongFn({
formats: timeFormats,
defaultWidth: 'full'
}),
// ...
}
export default formatLong
```
#### formatLong.dateTimeFormats
Use
['Date & Time'/'Gregorian'/'Formats - Standard - Date & Time Combination Formats'](https://www.unicode.org/cldr/charts/32/summary/en.html#1910)
values from the CLDR chart.
```js
// In `en-US` locale
import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'
var dateTimeFormats = {
full: "{{date}} 'at' {{time}}",
long: "{{date}} 'at' {{time}}",
medium: '{{date}}, {{time}}',
short: '{{date}}, {{time}}'
}
var formatLong = {
// ...
dateTime: buildFormatLongFn({
formats: dateTimeFormats,
defaultWidth: 'full'
})
}
export default formatLong
```
'{{date}}' and '{{time}}' from the strings will be replaced with the date and time respectively.
### formatRelative
Put this function in `_lib/formatRelative/index.js` inside your locale directory.
Relative date formats written in `format` token string format.
See the list of tokens: https://date-fns.org/docs/format.
Has to process `lastWeek`, `yesterday`, `today`, `tomorrow`, `nextWeek` and `other` tokens.
```javascript
// In `en-US` locale
var formatRelativeLocale = {
lastWeek: "'last' eeee 'at' p",
yesterday: "'yesterday at' p",
today: "'today at' p",
tomorrow: "'tomorrow at' p",
nextWeek: "eeee 'at' p",
other: 'P'
}
export default function formatRelative (token, date, baseDate, options) {
return formatRelativeLocale[token]
}
```
You can use `date` and `baseDate` supplied to the function for the difficult situations
(e.g. grammatical genders and cases of the days of the week)
Both `date` and `baseDate` are converted to UTC timezone, which means
that you should use UTC methods to take the date values (i.e. `date.getUTCDay()` instead of `date.getDay()`).
You can use UTC functions from `src/_lib` in date-fns root directory if they are available.
Don't forget to pass `options` object to them!
Example is below. Note the different grammatical case for weekdays (accusative instead of nominative)
and declension of word "прошлый" which depends on the grammatical gender of the weekday:
```javascript
// In `ru` locale
import isSameUTCWeek from '../../../../_lib/isSameUTCWeek/index.js'
var accusativeWeekdays = ['воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу']
function lastWeek (day) {
var weekday = accusativeWeekdays[day]
switch (day) {
case 0:
return "'в прошлое " + weekday + " в' p"
case 1:
case 2:
case 4:
return "'в прошлый " + weekday + " в' p"
case 3:
case 5:
case 6:
return "'в прошлую " + weekday + " в' p"
}
}
function thisWeek (day) {
// ...
}
function nextWeek (day) {
// ...
}
var formatRelativeLocale = {
lastWeek: function (date, baseDate, options) {
var day = date.getUTCDay()
if (isSameUTCWeek(date, baseDate, options)) {
return thisWeek(day)
} else {
return lastWeek(day)
}
},
yesterday: "'вчера в' p",
today: "'сегодня в' p",
tomorrow: "'завтра в' p",
nextWeek: function (date, baseDate, options) {
var day = date.getUTCDay()
if (isSameUTCWeek(date, baseDate, options)) {
return thisWeek(day)
} else {
return nextWeek(day)
}
},
other: 'P'
}
export default function formatRelative (token, date, baseDate, options) {
var format = formatRelativeLocale[token]
if (typeof format === 'function') {
return format(date, baseDate, options)
}
return format
}
```
### match
Put this object in `_lib/match/index.js` inside your locale directory.
Contains the functions used by `parse` to parse a localized value:
```js
// In `en-US` locale:
import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js'
import buildMatchFn from '../../../_lib/buildMatchFn/index.js'
var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
var parseOrdinalNumberPattern = /\d+/i
var matchEraPatterns = {
narrow: /^(b|a)/i,
abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
wide: /^(before christ|before common era|anno domini|common era)/i
}
var parseEraPatterns = {
any: [/^b/i, /^(a|c)/i]
}
var matchQuarterPatterns = {
narrow: /^[1234]/i,
abbreviated: /^q[1234]/i,
wide: /^[1234](th|st|nd|rd)? quarter/i
}
var parseQuarterPatterns = {
any: [/1/i, /2/i, /3/i, /4/i]
}
var matchMonthPatterns = {
narrow: /^[jfmasond]/i,
abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
}
var parseMonthPatterns = {
narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],
any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]
}
var matchDayPatterns = {
narrow: /^[smtwf]/i,
short: /^(su|mo|tu|we|th|fr|sa)/i,
abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
}
var parseDayPatterns = {
narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
}
var matchDayPeriodPatterns = {
narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
}
var parseDayPeriodPatterns = {
any: {
am: /^a/i,
pm: /^p/i,
midnight: /^mi/i,
noon: /^no/i,
morning: /morning/i,
afternoon: /afternoon/i,
evening: /evening/i,
night: /night/i
}
}
var match = {
ordinalNumber: buildMatchPatternFn({
matchPattern: matchOrdinalNumberPattern,
parsePattern: parseOrdinalNumberPattern,
valueCallback: function (value) {
return parseInt(value, 10)
}
}),
era: buildMatchFn({
matchPatterns: matchEraPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseEraPatterns,
defaultParseWidth: 'any'
}),
quarter: buildMatchFn({
matchPatterns: matchQuarterPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseQuarterPatterns,
defaultParseWidth: 'any',
valueCallback: function (index) {
return index + 1
}
}),
month: buildMatchFn({
matchPatterns: matchMonthPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseMonthPatterns,
defaultParseWidth: 'any'
}),
day: buildMatchFn({
matchPatterns: matchDayPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseDayPatterns,
defaultParseWidth: 'any'
}),
dayPeriod: buildMatchFn({
matchPatterns: matchDayPeriodPatterns,
defaultMatchWidth: 'any',
parsePatterns: parseDayPeriodPatterns,
defaultParseWidth: 'any'
})
}
export default match
```
These functions mirror those in `localize`.
For `matchPatterns` the patterns should match the whole meaningful word for the parsed value
(which will be cut from the string in the process of parsing).
`parsePatterns` contains patterns to detect one of the values from the result of `matchPatterns`
Note that the patterns for `parsePatterns` don't necessary contain the whole word:
```javascript
// In `en-US` locale:
var parseDayPatterns = {
narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
}
```
but only the bare minimum to parse the value.
Also note that all patterns have "case-insensitive" flags
to match as much arbitrary user input as possible. For the same reason, try to match
any variation of diacritical marks:
```javascript
// In `eo` locale:
var matchDayPatterns = {
narrow: /^[dlmĵjvs]/i,
short: /^(di|lu|ma|me|(ĵ|jx|jh|j)a|ve|sa)/i,
abbreviated: /^(dim|lun|mar|mer|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)|ven|sab)/i,
wide: /^(diman(ĉ|cx|ch|c)o|lundo|mardo|merkredo|(ĵ|jx|jh|j)a(ŭ|ux|uh|u)do|vendredo|sabato)/i
}
var parseDayPatterns = {
narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^(j|ĵ)/i, /^v/i, /^s/i],
any: [/^d/i, /^l/i, /^ma/i, /^me/i, /^(j|ĵ)/i, /^v/i, /^s/i]
}
```
Here, for the word "dimanĉo" the functions will match also "dimancxo", "dimancho"
and even grammatically incorrect "dimanco".
Try to match any possible way of writing the word. Don't forget the grammatical cases:
```javascript
// In `ru` locale:
var matchMonthPatterns = {
narrow: /^[яфмаисонд]/i,
abbreviated: /^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)/i,
wide: /^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i
}
```
and variations of short weekdays and months:
```javascript
// In `ru` locale:
var matchDayPatterns = {
narrow: /^[впсч]/i,
short: /^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i,
abbreviated: /^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,
wide: /^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i
}
```
(here, the `abbreviated` pattern will match both `вск` and `вос` as the short of `воскресенье` {Sunday})
In `match.ordinalNumber` match ordinal numbers as well as non-ordinal numbers:
```javascript
// In `en-US` locale:
var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i
```
Don't forget the grammatical genders:
```javascript
// In `ru` locale:
var matchOrdinalNumberPattern = /^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i
```
### formatDistance
`formatDistance` property of locale is a function which takes three arguments:
token passed by date-fns' `formatDistance` function (e.g. 'lessThanXMinutes'),
a number of units to be displayed by the function
(e.g. `locale.formatDistance('lessThanXMinutes', 5)` would display localized 'less than 5 minutes')
and object with options.
Your best guess is to copy `formatDistance` property from another locale and change the values.
### Tests
To test locales we use snapshots. See [`en-US` snapshot](https://github.com/date-fns/date-fns/blob/master/src/locale/en-US/snapshot.md) for an example.
To generate snapshots, run `yarn locale-snapshots`. The snapshot for the locale
you're working on will appear in the root locale directory (e.g. `src/locales/ru/snapshot.md`).
Once you are done with the locale, generate the snapshot and review the output values.
## Creating a locale with the same language as another locale
Import the locale properties already implemented for the language,
but replace unique properties.
```javascript
// Same as en-US
import formatDistance from '../en-US/_lib/formatDistance/index.js'
import formatRelative from '../en-US/_lib/formatRelative/index.js'
import localize from '../en-US/_lib/localize/index.js'
import match from '../en-US/_lib/match/index.js'
// Unique for en-GB
import formatLong from './_lib/formatLong/index.js'
/**
* @type {Locale}
* @category Locales
* @summary English locale (United Kingdom).
* @language English
* @iso-639-2 eng
* @author John Doe [@example]{@link https://github.com/example}
*/
var locale = {
formatDistance: formatDistance,
formatLong: formatLong,
formatRelative: formatRelative,
localize: localize,
match: match,
// Unique for en-GB
options: {
weekStartsOn: 1,
firstWeekContainsDate: 4
}
}
export default locale
```
+147
View File
@@ -0,0 +1,147 @@
const path = require('path')
module.exports = {
groups: [
'General',
'Types',
'Common Helpers',
'Conversion Helpers',
'Interval Helpers',
'Timestamp Helpers',
'Millisecond Helpers',
'Second Helpers',
'Minute Helpers',
'Hour Helpers',
'Day Helpers',
'Weekday Helpers',
'Week Helpers',
'ISO Week Helpers',
'Month Helpers',
'Quarter Helpers',
'Year Helpers',
'ISO Week-Numbering Year Helpers',
'Decade Helpers',
],
staticDocs: [
{
type: 'markdown',
urlId: 'Getting-Started',
category: 'General',
title: 'Getting Started',
description: 'Introduction & installation instructions',
path: path.join(__dirname, 'gettingStarted.md'),
},
{
type: 'markdown',
urlId: 'Change-Log',
category: 'General',
title: 'Change Log',
description: 'Changes for each version of the library',
path: path.join(__dirname, '..', 'CHANGELOG.md'),
},
{
type: 'markdown',
urlId: 'Contributing',
category: 'General',
title: 'Contributing',
description: 'Contribution manual',
path: path.join(__dirname, '..', 'CONTRIBUTING.md'),
},
{
type: 'markdown',
urlId: 'Constants',
category: 'General',
title: 'Constants',
description: 'Useful constants',
path: path.join(__dirname, 'constants.md'),
},
{
type: 'markdown',
urlId: 'I18n',
category: 'General',
title: 'I18n',
description: 'Internationalization',
path: path.join(__dirname, 'i18n.md'),
},
{
type: 'markdown',
urlId: 'I18n-Contribution-Guide',
category: 'General',
title: 'I18n Contribution Guide',
description: 'Locales manual',
path: path.join(__dirname, 'i18nContributionGuide.md'),
},
{
type: 'markdown',
urlId: 'Time-Zones',
category: 'General',
title: 'Time Zones',
description: 'Time zone functions',
path: path.join(__dirname, 'timeZones.md'),
},
{
type: 'markdown',
urlId: 'ECMAScript-Modules',
category: 'General',
title: 'ECMAScript Modules',
description: 'Tree-shaking guide',
path: path.join(__dirname, 'esm.md'),
},
{
type: 'markdown',
urlId: 'webpack',
category: 'General',
title: 'webpack',
description: 'Using date-fns with webpack',
path: path.join(__dirname, 'webpack.md'),
},
{
type: 'markdown',
urlId: 'FP-Guide',
category: 'General',
title: 'FP Guide',
description: 'Curried functions',
path: path.join(__dirname, 'fp.md'),
},
{
type: 'markdown',
urlId: 'Unicode-Tokens',
category: 'General',
title: 'Unicode Tokens',
description: 'Usage of the Unicode tokens in parse and format',
path: path.join(__dirname, 'unicodeTokens.md'),
},
{
type: 'markdown',
urlId: 'Upgrade-Guide',
category: 'General',
title: 'Upgrade guide',
description: 'Changes from v1 to v2',
path: path.join(__dirname, 'upgradeGuide.md'),
},
{
type: 'markdown',
urlId: 'License',
category: 'General',
title: 'License',
description: 'MIT © Sasha Koss',
path: path.join(__dirname, '..', 'LICENSE.md'),
},
],
sharedDocs: [
{
fullPath: path.join(__dirname, 'Interval.js'),
},
{
fullPath: path.join(__dirname, 'Locale.js'),
},
{
fullPath: path.join(__dirname, 'Duration.js'),
},
{
fullPath: path.join(__dirname, 'Day.js'),
},
],
}
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="32px" height="26px" viewBox="0 0 32 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 3.7.1 (28215) - http://www.bohemiancoding.com/sketch -->
<title>Slice 1</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="date-fns-mini-logo" fill="#770C56">
<g id="Page-1">
<g id="logo">
<g id="Page-1">
<g id="Solid-logo">
<g id="White-logo">
<path d="M0.0773377951,12.9617647 C0.0773377951,10.4657522 0.541359926,8.11201106 1.46941811,5.90047059 C2.39747629,3.68893013 3.73386003,1.72977324 5.47860941,0.0229411764 L8.98665179,0.0229411764 C5.34866372,3.58342956 3.52969697,7.89632761 3.52969697,12.9617647 C3.52969697,18.0272018 5.34866372,22.3400999 8.98665179,25.9005883 L5.47860941,25.9005883 C3.73386003,24.1937561 2.39747629,22.2345993 1.46941811,20.0230588 C0.541359926,17.8115184 0.0773377951,15.4577772 0.0773377951,12.9617647 L0.0773377951,12.9617647 L0.0773377951,12.9617647 L0.0773377951,12.9617647 Z M31.4378137,12.9617647 C31.4378137,15.4577772 30.9737916,17.8115184 30.0457334,20.0230588 C29.1176752,22.2345993 27.7812915,24.1937561 26.0365421,25.9005883 L22.5284998,25.9005883 C26.1664878,22.3400999 27.9854545,18.0272018 27.9854545,12.9617647 C27.9854545,7.89632761 26.1664878,3.58342956 22.5284998,0.0229411764 L26.0365421,0.0229411764 C27.7812915,1.72977324 29.1176752,3.68893013 30.0457334,5.90047059 C30.9737916,8.11201106 31.4378137,10.4657522 31.4378137,12.9617647 L31.4378137,12.9617647 L31.4378137,12.9617647 L31.4378137,12.9617647 Z" id="Parans"></path>
<g id="Hands" transform="translate(12.954081, 1.720588)">
<rect id="Hand" x="0" y="0" width="2.32013386" height="13.1911764"></rect>
<polygon id="Hand" points="2.3189551 13.1499342 0.815087916 11.6629302 10.2484366 2.3353599 11.7523038 3.82236388 2.3189551 13.1499342"></polygon>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 176 33"><g fill="#770C56" fill-rule="evenodd"><path d="M.1 16.5A22.7 22.7 0 017.1 0h4.4a22 22 0 00-7 16.5 22 22 0 007 16.4H7A22.5 22.5 0 01.1 16.5zm40.2 0a22.7 22.7 0 01-7 16.4H29a22 22 0 007-16.4 22 22 0 00-7-16.5h4.5a22.5 22.5 0 016.9 16.5z" fill-rule="nonzero"/><path d="M16.6 2.2h3v16.7h-3z"/><path d="M19.6 18.9l-2-2L29.7 5.2l2 2zM53.4 17.5c0 2 .5 3.8 1.4 5.2.8 1.4 2.2 2 4.2 2 1.5 0 2.7-.6 3.7-1.9 1-1.3 1.4-3.1 1.4-5.5 0-2.5-.5-4.3-1.5-5.5a4.7 4.7 0 00-3.7-1.7c-1.6 0-3 .6-4 1.8-1 1.3-1.5 3.1-1.5 5.6zm5-10.3c1.4 0 2.7.3 3.7 1 .5.3 1.2 1 2 1.9V.3h3v26.6h-2.9v-2.7a7 7 0 01-2.7 2.6c-1 .5-2.2.8-3.5.8-2.2 0-4-.9-5.6-2.7a10.6 10.6 0 01-2.4-7.2c0-2.9.7-5.3 2.2-7.4a7 7 0 016.1-3zm15.1 14.6c0 1 .4 1.7 1 2.2.8.5 1.6.8 2.5.8 1.2 0 2.3-.3 3.3-.8a4.5 4.5 0 002.7-4.3V17l-1.5.6-1.8.4-2 .2c-1.2.2-2 .4-2.7.8-1 .5-1.5 1.4-1.5 2.7zm8-6.6c.7-.1 1.2-.4 1.4-1 .2-.2.2-.7.2-1.2 0-1.1-.4-1.9-1.1-2.4-.8-.5-2-.8-3.4-.8-1.7 0-3 .5-3.6 1.4-.4.5-.7 1.3-.8 2.3h-3c0-2.4.8-4 2.3-5 1.5-1 3.2-1.4 5.1-1.4 2.3 0 4.2.4 5.6 1.3 1.4.9 2.1 2.2 2.1 4v11.2c0 .3 0 .6.2.8.1.2.4.3.9.3a5 5 0 001 0V27a9 9 0 01-1.1.3h-1c-1.2 0-2-.4-2.5-1.2-.3-.4-.5-1-.6-1.7a8.8 8.8 0 01-7 3.2c-1.7 0-3.2-.6-4.3-1.7a5.4 5.4 0 01-1.8-4c0-1.9.6-3.2 1.7-4.2a8 8 0 014.4-1.9l5.2-.6zm9.9-13h3.3v5.4h3v2.6h-3V23c0 .6.2 1 .7 1.3l1.2.2a15.2 15.2 0 001.2 0v2.5l-1.2.3h-1.3c-1.5 0-2.6-.4-3.1-1.1-.6-.8-.8-1.8-.8-3V10.1h-2.6V7.6h2.6V2.2zm16.8 5a8.8 8.8 0 016.9 3.4c.7 1 1 2.1 1.3 3.4.2 1 .3 2.3.3 4.3h-14.2c0 2 .5 3.5 1.4 4.7.9 1.2 2.2 1.8 4 1.8a5.2 5.2 0 005.3-4h3.2c0 .8-.3 1.6-.8 2.4a7.6 7.6 0 01-5.3 4c-.8.3-1.7.4-2.6.4-2.4 0-4.5-.9-6.2-2.6a10.2 10.2 0 01-2.5-7.4c0-3 .9-5.6 2.6-7.6 1.6-1.9 3.8-2.9 6.6-2.9zm5.2 8.5a8.4 8.4 0 00-1-3.4c-.9-1.5-2.3-2.3-4.4-2.3a5 5 0 00-3.8 1.6c-1 1-1.5 2.4-1.6 4.1h10.8zm5.5-.8h9.1v3.4h-9v-3.4zM132 4.6c0-1.3.3-2.3.7-3 .8-1 2.2-1.6 4.4-1.6a11.4 11.4 0 011.4 0v3a26.4 26.4 0 00-1.2 0c-1 0-1.5.2-1.7.7-.2.6-.3 1.9-.3 4h3.2v2.5h-3.3V27H132V10.2h-2.7V7.7h2.7v-3zm8.6 3h3v2.7c1-1.1 2-2 3-2.4 1-.5 2.1-.8 3.4-.8 2.7 0 4.6 1 5.6 3 .5 1 .8 2.5.8 4.4V27H153V14.7c0-1.2-.2-2.1-.6-2.8-.5-1.2-1.6-1.8-3.1-1.8a4.9 4.9 0 00-4.2 1.8c-.6.6-1 1.3-1.1 2-.2.6-.3 1.6-.3 2.9v10.1h-3.2V7.6zm21.6 13.2c0 1.1.4 2 .8 2.5.8 1 2.3 1.6 4.3 1.6 1.2 0 2.2-.2 3.2-.8.9-.5 1.3-1.3 1.3-2.4a2 2 0 00-1-1.9c-.5-.3-1.5-.6-2.9-1l-2.5-.6c-1.7-.4-3-.8-3.7-1.3a4.1 4.1 0 01-2-3.7c0-1.8.6-3.3 1.9-4.4 1.3-1.2 3-1.7 5.3-1.7 3 0 5 .8 6.3 2.5.8 1.1 1.2 2.3 1.2 3.5h-3c-.1-.7-.4-1.4-.9-2-.7-.8-2-1.3-3.8-1.3-1.3 0-2.2.3-2.8.8-.7.4-1 1-1 1.8 0 .9.4 1.5 1.3 2 .4.3 1.2.6 2.1.8l2.1.6c2.4.5 4 1 4.7 1.6 1.3.8 2 2.1 2 4a6 6 0 01-2 4.4c-1.3 1.2-3.3 1.9-6 1.9-2.9 0-5-.7-6.1-2a7.4 7.4 0 01-2-4.9h3.2z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+19
View File
@@ -0,0 +1,19 @@
# Releasing date-fns
1. First, make sure that the library is built by running `./scripts/build/build.sh` and committing and pushing any change you would have.
2. Then add the changelog entry generated by `yarn ts-node scripts/release/buildChangelog.ts` to [CHANGELOG.md](../CHANGELOG.md). Make sure that the output is valid Markdown and fix if there're any errors. Commit and push the file.
3. Using the version that the changelog script generated, run the command:
```bash
env VERSION="vX.XX.X" APP_ENV="production" GOOGLE_APPLICATION_CREDENTIALS="secrets/production/key.json" ./scripts/release/release.sh
```
The script will change `package.json`. **Do not commit the change, and reset it instead**.
4. Now when the package is published, go to [GitHub Releases](https://github.com/date-fns/date-fns/releases) and draft a new version using the changelog entry you generated earlier.
5. Finally, write an announce tweet using the created GitHub release as the tweet link.
You're done, great job!
+63
View File
@@ -0,0 +1,63 @@
# Time Zones
## Table of Contents
- [Overview](#overview)
- [`date-fns-tz`](#date-fns-tz)
## Overview
Working with UTC or ISO date strings is easy, and so is working with JS dates when all times
are displayed in a user's local time in the browser. The difficulty comes when working with another
time zone's local time, other than the current system's, like showing the local time of an event in LA
at 8pm PST on a Node server in Europe or a user's machine set to EST.
In this case there are two relevant pieces of information:
- a fixed moment in time in the form of a timestamp, UTC or ISO date string, and
- the time zone descriptor, usually an offset or IANA time zone name (e.g. `America/Los_Angeles`).
Libraries like Moment and Luxon, which provide their own date time classes, manage these timestamp and time
zone values internally. Since `date-fns` always returns a plain JS Date, which implicitly has the current
system's time zone, helper functions are needed for handling common time zone related use cases.
## [`date-fns-tz`](https://www.npmjs.com/package/date-fns-tz)
Dependency free IANA time zone support is implemented via the
[Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) to keep
actual time zone data out of code bundles. Modern browsers all support the
[necessary features](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat#Browser_compatibility),
and for those that don't a [polyfill](https://github.com/yahoo/date-time-format-timezone) can be used.
Functions are provided for converting to and from a Date instance which will have the internal UTC time
adjusted so it prints to the correct time value in the associated time zone, regardless of the current
system time zone. The `date-fns` `format` function is extended with support for the `z...zzzz` tokens to
format long and short time zone names.
Compatible with `date-fns` version 2
License: MIT
### Synopsis
```js
const { zonedTimeToUtc, utcToZonedTime, format } = require('date-fns-tz')
// Set the date to "2018-09-01T16:01:36.386Z"
const utcDate = zonedTimeToUtc('2018-09-01 18:01:36.386', 'Europe/Berlin')
// Obtain a Date instance that will render the equivalent Berlin time for the UTC date
const date = new Date('2018-09-01T16:01:36.386Z')
const timeZone = 'Europe/Berlin'
const zonedDate = utcToZonedTime(date, timeZone)
// zonedDate could be used to initialize a date picker or display the formatted local date/time
// Set the output to "1.9.2018 18:01:36.386 GMT+02:00 (CEST)"
const pattern = 'd.M.yyyy HH:mm:ss.SSS \'GMT\' XXX (z)'
const output = format(zonedDate, pattern, { timeZone: 'Europe/Berlin' })
```
### Links
- [API / Usage Scenarios](https://github.com/marnusw/date-fns-tz#time-zone-helpers)
+54
View File
@@ -0,0 +1,54 @@
# Unicode Tokens
Starting with v2, `format` and `parse` use [Unicode tokens].
The tokens are different from Moment.js and other libraries that opted to use
custom formatting rules. While usage of a standard ensures compatibility and
the future of the library, it causes confusion that this document intends
to resolve.
## Popular mistakes
There are 4 tokens that cause most of the confusion:
- `D` and `DD` that represent the day of a year (1, 2, ..., 365, 366)
are often confused with `d` and `dd` that represent the day of a month
(1, 2, ..., 31).
- `YY` and `YYYY` that represent the local week-numbering year (44, 01, 00, 17)
are often confused with `yy` and `yyyy` that represent the calendar year.
```js
// ❌ Wrong!
format(new Date(), 'YYYY-MM-DD')
//=> 2018-10-283
// ✅ Correct
format(new Date(), 'yyyy-MM-dd')
//=> 2018-10-10
// ❌ Wrong!
parse('11.02.87', 'D.MM.YY', new Date()).toString()
//=> 'Sat Jan 11 1986 00:00:00 GMT+0200 (EET)'
// ✅ Correct
parse('11.02.87', 'd.MM.yy', new Date()).toString()
//=> 'Wed Feb 11 1987 00:00:00 GMT+0200 (EET)'
```
To help with the issue, `format` and `parse` functions won't accept
these tokens without `useAdditionalDayOfYearTokens` option for `D` and `DD` and
`useAdditionalWeekYearTokens` options for `YY` and `YYYY`:
```js
format(new Date(), 'D', { useAdditionalDayOfYearTokens: true })
//=> '283'
parse('365+1987', 'DD+YYYY', new Date(), {
useAdditionalDayOfYearTokens: true,
useAdditionalWeekYearTokens: true
}).toString()
//=> 'Wed Dec 31 1986 00:00:00 GMT+0200 (EET)'
```
[Unicode tokens]: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+118
View File
@@ -0,0 +1,118 @@
# v2 Upgrade Guide
## Common changes
This page covers a few of the most common problems people face when updating from v1 to v2. For a more detailed list of changes, look at the [change log for version 2.0.0](https://date-fns.org/docs/Change-Log).
### Camel case naming schema
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'
```
### New formatting tokens
Starting with v2 `format` and `parse` uses [Unicode tokens].
See [Unicode Tokens doc](https://date-fns.org/docs/Unicode-Tokens) for more details.
### String arguments
Functions now don't accept strings as date arguments. Strings should
be parsed using `parseISO` (ISO 8601) or `parse`.
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)
```
### Arguments conversion
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 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;
- `NaN` for functions that return numbers;
- and `String('Invalid Date')` for functions that return strings.
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.
### `null`
`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.
### `RangeError`
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.
### `TypeError`
All functions now check if the passed number of arguments is less
than the number of required arguments and throw `TypeError` exception if so.
### UMD/CDN
The Bower & UMD/CDN package versions are no longer supported.
### 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'
```
[unicode tokens]: https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table

Some files were not shown because too many files have changed in this diff Show More