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; |