"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = intlFormat; var _index = _interopRequireDefault(require("../_lib/requiredArgs/index.js")); /** * @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;