40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
exports.tzName = tzName;
|
|
/**
|
|
* Time zone name format.
|
|
*/
|
|
|
|
/**
|
|
* The function returns the time zone name for the given date in the specified
|
|
* time zone.
|
|
*
|
|
* It uses the `Intl.DateTimeFormat` API and by default outputs the time zone
|
|
* name in a long format, e.g. "Pacific Standard Time" or
|
|
* "Singapore Standard Time".
|
|
*
|
|
* It is possible to specify the format as the third argument using one of the following options
|
|
*
|
|
* - "short": e.g. "EDT" or "GMT+8".
|
|
* - "long": e.g. "Eastern Daylight Time".
|
|
* - "shortGeneric": e.g. "ET" or "Singapore Time".
|
|
* - "longGeneric": e.g. "Eastern Time" or "Singapore Standard Time".
|
|
*
|
|
* These options correspond to TR35 tokens `z..zzz`, `zzzz`, `v`, and `vvvv` respectively: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-zone
|
|
*
|
|
* @param timeZone - Time zone name (IANA or UTC offset)
|
|
* @param date - Date object to get the time zone name for
|
|
* @param format - Optional format of the time zone name. Defaults to "long". Can be "short", "long", "shortGeneric", or "longGeneric".
|
|
*
|
|
* @returns Time zone name (e.g. "Singapore Standard Time")
|
|
*/
|
|
function tzName(timeZone, date, format = "long") {
|
|
return new Intl.DateTimeFormat("en-US", {
|
|
// Enforces engine to render the time. Without the option JavaScriptCore omits it.
|
|
hour: "numeric",
|
|
timeZone: timeZone,
|
|
timeZoneName: format
|
|
}).format(date).split(/\s/g) // Format.JS uses non-breaking spaces
|
|
.slice(2) // Skip the hour and AM/PM parts
|
|
.join(" ");
|
|
} |