101 lines
4.1 KiB
JavaScript
101 lines
4.1 KiB
JavaScript
|
"use strict";
|
|||
|
|
|||
|
Object.defineProperty(exports, "__esModule", {
|
|||
|
value: true
|
|||
|
});
|
|||
|
exports.default = intlFormat;
|
|||
|
|
|||
|
var _index = _interopRequireDefault(require("../_lib/requiredArgs/index.js"));
|
|||
|
|
|||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|||
|
|
|||
|
/**
|
|||
|
* @name intlFormat
|
|||
|
* @category Common Helpers
|
|||
|
* @summary Format the date with Intl.DateTimeFormat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat).
|
|||
|
*
|
|||
|
* @description
|
|||
|
* Return the formatted date string in the given format.
|
|||
|
* The method uses [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) inside.
|
|||
|
* formatOptions are the same as [`Intl.DateTimeFormat` options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options)
|
|||
|
*
|
|||
|
* > ⚠️ Please note that before Node version 13.0.0, only the locale data for en-US is available by default.
|
|||
|
*
|
|||
|
* @param {Date|Number} argument - the original date.
|
|||
|
* @param {Object} [formatOptions] - an object with options.
|
|||
|
* @param {'lookup'|'best fit'} [formatOptions.localeMatcher='best fit'] - locale selection algorithm.
|
|||
|
* @param {'narrow'|'short'|'long'} [formatOptions.weekday] - representation the days of the week.
|
|||
|
* @param {'narrow'|'short'|'long'} [formatOptions.era] - representation of eras.
|
|||
|
* @param {'numeric'|'2-digit'} [formatOptions.year] - representation of years.
|
|||
|
* @param {'numeric'|'2-digit'|'narrow'|'short'|'long'} [formatOptions.month='numeric'] - representation of month.
|
|||
|
* @param {'numeric'|'2-digit'} [formatOptions.day='numeric'] - representation of day.
|
|||
|
* @param {'numeric'|'2-digit'} [formatOptions.hour='numeric'] - representation of hours.
|
|||
|
* @param {'numeric'|'2-digit'} [formatOptions.minute] - representation of minutes.
|
|||
|
* @param {'numeric'|'2-digit'} [formatOptions.second] - representation of seconds.
|
|||
|
* @param {'short'|'long'} [formatOptions.timeZoneName] - representation of names of time zones.
|
|||
|
* @param {'basic'|'best fit'} [formatOptions.formatMatcher='best fit'] - format selection algorithm.
|
|||
|
* @param {Boolean} [formatOptions.hour12] - determines whether to use 12-hour time format.
|
|||
|
* @param {String} [formatOptions.timeZone] - the time zone to use.
|
|||
|
* @param {Object} [localeOptions] - an object with locale.
|
|||
|
* @param {String|String[]} [localeOptions.locale] - the locale code
|
|||
|
* @returns {String} the formatted date string.
|
|||
|
* @throws {TypeError} 1 argument required.
|
|||
|
* @throws {RangeError} `date` must not be Invalid Date
|
|||
|
*
|
|||
|
* @example
|
|||
|
* // Represent 10 October 2019 in German.
|
|||
|
* // Convert the date with format's options and locale's options.
|
|||
|
* const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {
|
|||
|
* weekday: 'long',
|
|||
|
* year: 'numeric',
|
|||
|
* month: 'long',
|
|||
|
* day: 'numeric',
|
|||
|
* }, {
|
|||
|
* locale: 'de-DE',
|
|||
|
* })
|
|||
|
* //=> Freitag, 4. Oktober 2019
|
|||
|
*
|
|||
|
* @example
|
|||
|
* // Represent 10 October 2019.
|
|||
|
* // Convert the date with format's options.
|
|||
|
* const result = intlFormat.default(new Date(2019, 9, 4, 12, 30, 13, 456), {
|
|||
|
* year: 'numeric',
|
|||
|
* month: 'numeric',
|
|||
|
* day: 'numeric',
|
|||
|
* hour: 'numeric',
|
|||
|
* })
|
|||
|
* //=> 10/4/2019, 12 PM
|
|||
|
*
|
|||
|
* @example
|
|||
|
* // Represent 10 October 2019 in Korean.
|
|||
|
* // Convert the date with locale's options.
|
|||
|
* const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456), {
|
|||
|
* locale: 'ko-KR',
|
|||
|
* })
|
|||
|
* //=> 2019. 10. 4.
|
|||
|
*
|
|||
|
* @example
|
|||
|
* // Represent 10 October 2019 in middle-endian format:
|
|||
|
* const result = intlFormat(new Date(2019, 9, 4, 12, 30, 13, 456))
|
|||
|
* //=> 10/4/2019
|
|||
|
*/
|
|||
|
function intlFormat(date, formatOrLocale, localeOptions) {
|
|||
|
var _localeOptions;
|
|||
|
|
|||
|
(0, _index.default)(1, arguments);
|
|||
|
var formatOptions;
|
|||
|
|
|||
|
if (isFormatOptions(formatOrLocale)) {
|
|||
|
formatOptions = formatOrLocale;
|
|||
|
} else {
|
|||
|
localeOptions = formatOrLocale;
|
|||
|
}
|
|||
|
|
|||
|
return new Intl.DateTimeFormat((_localeOptions = localeOptions) === null || _localeOptions === void 0 ? void 0 : _localeOptions.locale, formatOptions).format(date);
|
|||
|
}
|
|||
|
|
|||
|
function isFormatOptions(opts) {
|
|||
|
return opts !== undefined && !('locale' in opts);
|
|||
|
}
|
|||
|
|
|||
|
module.exports = exports.default;
|