aboutsummaryrefslogtreecommitdiffstats
path: root/npm_assets/node_modules/luxon/src/info.js
diff options
context:
space:
mode:
Diffstat (limited to 'npm_assets/node_modules/luxon/src/info.js')
-rw-r--r--npm_assets/node_modules/luxon/src/info.js186
1 files changed, 186 insertions, 0 deletions
diff --git a/npm_assets/node_modules/luxon/src/info.js b/npm_assets/node_modules/luxon/src/info.js
new file mode 100644
index 0000000..52912ac
--- /dev/null
+++ b/npm_assets/node_modules/luxon/src/info.js
@@ -0,0 +1,186 @@
+import DateTime from "./datetime.js";
+import Settings from "./settings.js";
+import Locale from "./impl/locale.js";
+import IANAZone from "./zones/IANAZone.js";
+import { normalizeZone } from "./impl/zoneUtil.js";
+
+import { hasFormatToParts, hasIntl, hasRelative } from "./impl/util.js";
+
+/**
+ * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.
+ */
+export default class Info {
+ /**
+ * Return whether the specified zone contains a DST.
+ * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.
+ * @return {boolean}
+ */
+ static hasDST(zone = Settings.defaultZone) {
+ const proto = DateTime.local()
+ .setZone(zone)
+ .set({ month: 12 });
+
+ return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;
+ }
+
+ /**
+ * Return whether the specified zone is a valid IANA specifier.
+ * @param {string} zone - Zone to check
+ * @return {boolean}
+ */
+ static isValidIANAZone(zone) {
+ return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);
+ }
+
+ /**
+ * Converts the input into a {@link Zone} instance.
+ *
+ * * If `input` is already a Zone instance, it is returned unchanged.
+ * * If `input` is a string containing a valid time zone name, a Zone instance
+ * with that name is returned.
+ * * If `input` is a string that doesn't refer to a known time zone, a Zone
+ * instance with {@link Zone.isValid} == false is returned.
+ * * If `input is a number, a Zone instance with the specified fixed offset
+ * in minutes is returned.
+ * * If `input` is `null` or `undefined`, the default zone is returned.
+ * @param {string|Zone|number} [input] - the value to be converted
+ * @return {Zone}
+ */
+ static normalizeZone(input) {
+ return normalizeZone(input, Settings.defaultZone);
+ }
+
+ /**
+ * Return an array of standalone month names.
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
+ * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long"
+ * @param {Object} opts - options
+ * @param {string} [opts.locale] - the locale code
+ * @param {string} [opts.numberingSystem=null] - the numbering system
+ * @param {string} [opts.outputCalendar='gregory'] - the calendar
+ * @example Info.months()[0] //=> 'January'
+ * @example Info.months('short')[0] //=> 'Jan'
+ * @example Info.months('numeric')[0] //=> '1'
+ * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'
+ * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'
+ * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'
+ * @return {[string]}
+ */
+ static months(
+ length = "long",
+ { locale = null, numberingSystem = null, outputCalendar = "gregory" } = {}
+ ) {
+ return Locale.create(locale, numberingSystem, outputCalendar).months(length);
+ }
+
+ /**
+ * Return an array of format month names.
+ * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that
+ * changes the string.
+ * See {@link months}
+ * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long"
+ * @param {Object} opts - options
+ * @param {string} [opts.locale] - the locale code
+ * @param {string} [opts.numberingSystem=null] - the numbering system
+ * @param {string} [opts.outputCalendar='gregory'] - the calendar
+ * @return {[string]}
+ */
+ static monthsFormat(
+ length = "long",
+ { locale = null, numberingSystem = null, outputCalendar = "gregory" } = {}
+ ) {
+ return Locale.create(locale, numberingSystem, outputCalendar).months(length, true);
+ }
+
+ /**
+ * Return an array of standalone week names.
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
+ * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long".
+ * @param {Object} opts - options
+ * @param {string} [opts.locale] - the locale code
+ * @param {string} [opts.numberingSystem=null] - the numbering system
+ * @example Info.weekdays()[0] //=> 'Monday'
+ * @example Info.weekdays('short')[0] //=> 'Mon'
+ * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'
+ * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'
+ * @return {[string]}
+ */
+ static weekdays(length = "long", { locale = null, numberingSystem = null } = {}) {
+ return Locale.create(locale, numberingSystem, null).weekdays(length);
+ }
+
+ /**
+ * Return an array of format week names.
+ * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that
+ * changes the string.
+ * See {@link weekdays}
+ * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long".
+ * @param {Object} opts - options
+ * @param {string} [opts.locale=null] - the locale code
+ * @param {string} [opts.numberingSystem=null] - the numbering system
+ * @return {[string]}
+ */
+ static weekdaysFormat(length = "long", { locale = null, numberingSystem = null } = {}) {
+ return Locale.create(locale, numberingSystem, null).weekdays(length, true);
+ }
+
+ /**
+ * Return an array of meridiems.
+ * @param {Object} opts - options
+ * @param {string} [opts.locale] - the locale code
+ * @example Info.meridiems() //=> [ 'AM', 'PM' ]
+ * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]
+ * @return {[string]}
+ */
+ static meridiems({ locale = null } = {}) {
+ return Locale.create(locale).meridiems();
+ }
+
+ /**
+ * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.
+ * @param {string} [length='short'] - the length of the era representation, such as "short" or "long".
+ * @param {Object} opts - options
+ * @param {string} [opts.locale] - the locale code
+ * @example Info.eras() //=> [ 'BC', 'AD' ]
+ * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]
+ * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]
+ * @return {[string]}
+ */
+ static eras(length = "short", { locale = null } = {}) {
+ return Locale.create(locale, null, "gregory").eras(length);
+ }
+
+ /**
+ * Return the set of available features in this environment.
+ * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.
+ * Keys:
+ * * `zones`: whether this environment supports IANA timezones
+ * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing
+ * * `intl`: whether this environment supports general internationalization
+ * * `relative`: whether this environment supports relative time formatting
+ * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }
+ * @return {Object}
+ */
+ static features() {
+ let intl = false,
+ intlTokens = false,
+ zones = false,
+ relative = false;
+
+ if (hasIntl()) {
+ intl = true;
+ intlTokens = hasFormatToParts();
+ relative = hasRelative();
+
+ try {
+ zones =
+ new Intl.DateTimeFormat("en", { timeZone: "America/New_York" }).resolvedOptions()
+ .timeZone === "America/New_York";
+ } catch (e) {
+ zones = false;
+ }
+ }
+
+ return { intl, intlTokens, zones, relative };
+ }
+}