relative-time-format
Intl.RelativeTimeFormat polyfill.
Install
npm install relative-time-format --save
Use
import RelativeTimeFormat from 'relative-time-format'
import en from 'relative-time-format/locale/en'
RelativeTimeFormat.addLocale(en)
// Returns "2 days ago"
new RelativeTimeFormat('en').format(-2, 'day')
Locales
The localization resides in the locale folder. The format of a localization is:
{
…
"day": {
"past": {
"one": "{0} day ago",
"other": "{0} days ago"
},
"future": {
"one": "in {0} day",
"other": "in {0} days"
}
},
…
}
The past and future can be defined by any of: zero, one, two, few, many and other. For more info on which is which read the official Unicode CLDR documentation. Unicode CLDR (Common Locale Data Repository) is an industry standard and is basically a collection of formatting rules for all locales (date, time, currency, measurement units, numbers, etc).
To determine whether a certain amount of time (number) is one, few, or something else, relative-time-format uses Unicode CLDR rules for formatting plurals. These rules are number quantifying functions (one for each locale) which can tell if a number should be treated as zero, one, two, few, many or other. Knowing how these pluralization rules work is not required but anyway here are some links for curious advanced readers: rules explanation, list of rules for all locales, converting those rules to javascript functions. These quantifying functions can be found as quantify properties of a locale data.
The locale folder is generated from CLDR data by running:
npm run generate-locales
Locale data is extracted from cldr-data (quantifiers) and cldr-dates-full (relative time messages) packages which usually get some updates once or twice a year.
npm install cldr-data@latest cldr-dates-full@latest --save
npm run generate-locales
Contributing
After cloning this repo, ensure dependencies are installed by running:
npm install
This module is written in ES6 and uses Babel for ES5 transpilation. Widely consumable JavaScript can be produced by running:
npm run build
Once npm run build has run, you may import or require() directly from
node.
After developing, the full test suite can be evaluated by running:
npm test
When you're ready to test your new functionality on a real project, you can run
npm pack
It will build, test and then create a .tgz archive which you can then install in your project folder
npm install [package-name]-[version].tar.gz