diff --git a/README.md b/README.md index f6ba4cfa..5fae0c94 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,10 @@ const timeZones = getTimeZones(); // You can also provide an optional parameter to include UTC in the result. // This adds a time zone with the name "UTC" and a fixed offset of 0. const timeZonesWithUtc = getTimeZones({ includeUtc: true }); + +// Additionally, you can provide a parameter to include base GMT Offsets in the result. +// This adds a set of timezones for "Etc/GMT-14" through to "Etc/GMT+12" with matching fixed offsets. +const timezoneWithGmtOffsets = getTimeZones({ includeGmtOffsets: true }); ``` This method returns an array of time zones objects: diff --git a/index.d.ts b/index.d.ts index 78c24671..7c180c45 100644 --- a/index.d.ts +++ b/index.d.ts @@ -21,6 +21,7 @@ interface TimeZone extends RawTimeZone { interface TimeZoneOptions { includeUtc?: boolean; + includeGmtOffsets?: boolean; } export const rawTimeZones: RawTimeZone[]; diff --git a/lib/getTimeZones.js b/lib/getTimeZones.js index c81fd4af..63ea2b2f 100644 --- a/lib/getTimeZones.js +++ b/lib/getTimeZones.js @@ -1,10 +1,18 @@ import rawTimeZones from "../raw-time-zones.json"; +import rawUtcTimezones from "../raw-gmt-offset-time-zones.json"; import formatTimeZone from "./formatTimeZone.js"; import { getZoneOffset } from "./utils/timeZone.js"; export default function getTimeZones(opts) { const includeUtc = !!opts && opts.includeUtc; + const includeGmtOffsets = !!opts && opts.includeGmtOffsets; + + const initialTimezones = [ + ...(includeGmtOffsets ? rawUtcTimezones : []), + ...(includeUtc ? [utcTimezone] : []), + ]; + return rawTimeZones .reduce( function (acc, timeZone) { @@ -33,7 +41,7 @@ export default function getTimeZones(opts) { return acc; }, - includeUtc ? [utcTimezone] : [], + initialTimezones, ) .sort((a, b) => { return ( diff --git a/raw-gmt-offset-time-zones.json b/raw-gmt-offset-time-zones.json new file mode 100644 index 00000000..8f7cafd9 --- /dev/null +++ b/raw-gmt-offset-time-zones.json @@ -0,0 +1,26 @@ +[{"name":"Etc/GMT-14","alternativeName":"GMT+14","abbreviation":"+14","group":["Etc/GMT-14"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-840,"rawFormat":"+14:00","currentTimeOffsetInMinutes":-840,"currentTimeFormat":"+14:00"}, +{"name":"Etc/GMT-13","alternativeName":"GMT+13","abbreviation":"+13","group":["Etc/GMT-13"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-780,"rawFormat":"+13:00","currentTimeOffsetInMinutes":-780,"currentTimeFormat":"+13:00"}, +{"name":"Etc/GMT-12","alternativeName":"GMT+12","abbreviation":"+12","group":["Etc/GMT-12"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-720,"rawFormat":"+12:00","currentTimeOffsetInMinutes":-720,"currentTimeFormat":"+12:00"}, +{"name":"Etc/GMT-11","alternativeName":"GMT+11","abbreviation":"+11","group":["Etc/GMT-11"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-660,"rawFormat":"+11:00","currentTimeOffsetInMinutes":-660,"currentTimeFormat":"+11:00"}, +{"name":"Etc/GMT-10","alternativeName":"GMT+10","abbreviation":"+10","group":["Etc/GMT-10"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-600,"rawFormat":"+10:00","currentTimeOffsetInMinutes":-600,"currentTimeFormat":"+10:00"}, +{"name":"Etc/GMT-9","alternativeName":"GMT+09","abbreviation":"+09","group":["Etc/GMT-9"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-540,"rawFormat":"+09:00","currentTimeOffsetInMinutes":-540,"currentTimeFormat":"+09:00"}, +{"name":"Etc/GMT-8","alternativeName":"GMT+08","abbreviation":"+08","group":["Etc/GMT-8"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-480,"rawFormat":"+08:00","currentTimeOffsetInMinutes":-480,"currentTimeFormat":"+08:00"}, +{"name":"Etc/GMT-7","alternativeName":"GMT+07","abbreviation":"+07","group":["Etc/GMT-7"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-420,"rawFormat":"+07:00","currentTimeOffsetInMinutes":-420,"currentTimeFormat":"+07:00"}, +{"name":"Etc/GMT-6","alternativeName":"GMT+06","abbreviation":"+06","group":["Etc/GMT-6"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-360,"rawFormat":"+06:00","currentTimeOffsetInMinutes":-360,"currentTimeFormat":"+06:00"}, +{"name":"Etc/GMT-5","alternativeName":"GMT+05","abbreviation":"+05","group":["Etc/GMT-5"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-300,"rawFormat":"+05:00","currentTimeOffsetInMinutes":-300,"currentTimeFormat":"+05:00"}, +{"name":"Etc/GMT-4","alternativeName":"GMT+04","abbreviation":"+04","group":["Etc/GMT-4"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-240,"rawFormat":"+04:00","currentTimeOffsetInMinutes":-240,"currentTimeFormat":"+04:00"}, +{"name":"Etc/GMT-3","alternativeName":"GMT+03","abbreviation":"+03","group":["Etc/GMT-3"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-180,"rawFormat":"+03:00","currentTimeOffsetInMinutes":-180,"currentTimeFormat":"+03:00"}, +{"name":"Etc/GMT-2","alternativeName":"GMT+02","abbreviation":"+02","group":["Etc/GMT-2"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-120,"rawFormat":"+02:00","currentTimeOffsetInMinutes":-120,"currentTimeFormat":"+02:00"}, +{"name":"Etc/GMT-1","alternativeName":"GMT+01","abbreviation":"+01","group":["Etc/GMT-1"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":-60,"rawFormat":"+01:00","currentTimeOffsetInMinutes":-60,"currentTimeFormat":"+01:00"}, +{"name":"Etc/GMT+1","alternativeName":"GMT-01","abbreviation":"-01","group":["Etc/GMT+1"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":60,"rawFormat":"-01:00","currentTimeOffsetInMinutes":60,"currentTimeFormat":"-01:00"}, +{"name":"Etc/GMT+2","alternativeName":"GMT-02","abbreviation":"-02","group":["Etc/GMT+2"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":120,"rawFormat":"-02:00","currentTimeOffsetInMinutes":120,"currentTimeFormat":"-02:00"}, +{"name":"Etc/GMT+3","alternativeName":"GMT-03","abbreviation":"-03","group":["Etc/GMT+3"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":180,"rawFormat":"-03:00","currentTimeOffsetInMinutes":180,"currentTimeFormat":"-03:00"}, +{"name":"Etc/GMT+4","alternativeName":"GMT-04","abbreviation":"-04","group":["Etc/GMT+4"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":240,"rawFormat":"-04:00","currentTimeOffsetInMinutes":240,"currentTimeFormat":"-04:00"}, +{"name":"Etc/GMT+5","alternativeName":"GMT-05","abbreviation":"-05","group":["Etc/GMT+5"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":300,"rawFormat":"-05:00","currentTimeOffsetInMinutes":300,"currentTimeFormat":"-05:00"}, +{"name":"Etc/GMT+6","alternativeName":"GMT-06","abbreviation":"-06","group":["Etc/GMT+6"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":360,"rawFormat":"-06:00","currentTimeOffsetInMinutes":360,"currentTimeFormat":"-06:00"}, +{"name":"Etc/GMT+7","alternativeName":"GMT-07","abbreviation":"-07","group":["Etc/GMT+7"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":420,"rawFormat":"-07:00","currentTimeOffsetInMinutes":420,"currentTimeFormat":"-07:00"}, +{"name":"Etc/GMT+8","alternativeName":"GMT-08","abbreviation":"-08","group":["Etc/GMT+8"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":480,"rawFormat":"-08:00","currentTimeOffsetInMinutes":480,"currentTimeFormat":"-08:00"}, +{"name":"Etc/GMT+9","alternativeName":"GMT-09","abbreviation":"-09","group":["Etc/GMT+9"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":540,"rawFormat":"-09:00","currentTimeOffsetInMinutes":540,"currentTimeFormat":"-09:00"}, +{"name":"Etc/GMT+10","alternativeName":"GMT-10","abbreviation":"-10","group":["Etc/GMT+10"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":600,"rawFormat":"-10:00","currentTimeOffsetInMinutes":600,"currentTimeFormat":"-10:00"}, +{"name":"Etc/GMT+11","alternativeName":"GMT-11","abbreviation":"-11","group":["Etc/GMT+11"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":660,"rawFormat":"-11:00","currentTimeOffsetInMinutes":660,"currentTimeFormat":"-11:00"}, +{"name":"Etc/GMT+12","alternativeName":"GMT-12","abbreviation":"-12","group":["Etc/GMT+12"],"countryName":"","continentCode":"","continentName":"","mainCities":[""],"rawOffsetInMinutes":720,"rawFormat":"-12:00","currentTimeOffsetInMinutes":720,"currentTimeFormat":"-12:00"}] \ No newline at end of file