47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = tzIntlTimeZoneName;
|
|
|
|
/**
|
|
* Returns the formatted time zone name of the provided `timeZone` or the current
|
|
* system time zone if omitted, accounting for DST according to the UTC value of
|
|
* the date.
|
|
*/
|
|
function tzIntlTimeZoneName(length, date, options) {
|
|
var dtf = getDTF(length, options.timeZone, options.locale);
|
|
return dtf.formatToParts ? partsTimeZone(dtf, date) : hackyTimeZone(dtf, date);
|
|
}
|
|
|
|
function partsTimeZone(dtf, date) {
|
|
var formatted = dtf.formatToParts(date);
|
|
|
|
for (var i = formatted.length - 1; i >= 0; --i) {
|
|
if (formatted[i].type === 'timeZoneName') {
|
|
return formatted[i].value;
|
|
}
|
|
}
|
|
}
|
|
|
|
function hackyTimeZone(dtf, date) {
|
|
var formatted = dtf.format(date).replace(/\u200E/g, '');
|
|
var tzNameMatch = / [\w-+ ]+$/.exec(formatted);
|
|
return tzNameMatch ? tzNameMatch[0].substr(1) : '';
|
|
} // If a locale has been provided `en-US` is used as a fallback in case it is an
|
|
// invalid locale, otherwise the locale is left undefined to use the system locale.
|
|
|
|
|
|
function getDTF(length, timeZone, locale) {
|
|
if (locale && !locale.code) {
|
|
throw new Error("date-fns-tz error: Please set a language code on the locale object imported from date-fns, e.g. `locale.code = 'en-US'`");
|
|
}
|
|
|
|
return new Intl.DateTimeFormat(locale ? [locale.code, 'en-US'] : undefined, {
|
|
timeZone: timeZone,
|
|
timeZoneName: length
|
|
});
|
|
}
|
|
|
|
module.exports = exports.default; |